Jump to Navigation

WEB

WEB/PHP开发

基于本地php进程的web项目异步处理框架

由于服务器权限管理问题,不能安装类似gearman的异步任务管理器。

当前在实现的项目中存在许多可异步执行的处理,却要同步执行,影响使用方体验。

为了优化项目,选择使用这种比较土的办法实现异步功能。

机制描述:

      在需要执行异步位置,启动一后台PHP进程执行异步任务。

      异步任务的参数通过把当前的运行环境存储在临时文件,或者NoSQL中。

      还需要把指定的任务名称及参数,可存储在各种常用队列中。

      在启动异步任务进程时,把环境信息的路径或者key值作为进程参数传递过去。

      异步任务进程启动后取出参数信息,恢复执行环境。

      加载并执行指定的任务。

      任务完成后将结果存储到指定的位置,或者不存储执行结果。

关键点:

      统一的简单的调用接口。

      统一的环境信息及参数信息存储。

      统一的环境信息恢复机制。

      结果保存机制。

优点:

       不影响正常执行。

       可复制当前的运行环境。

       不经过web server层,执行效率好,并且不给web server带来额外压力。

       部署简单,无额外依赖,现有的能运行LAMP架构皆可。

       使用也很简单。
Category:

「翻译」Redis协议

「翻译」Redis协议

Redis

Redis协议是从以下几个方面做的一个折中方案:

  • 容易实现
  • 机器解析要快
  • 容易被人理解

网络层

客户端通过创建到6379端口的TCP连接来连接到一个Redis服务器。每个Redis命令或者客户端和服务器之间传输的数据都以\r\n (CRLF)结束。

请求

Redis可以接受由不同参数组成的命令。只要接收到一个命令,这个命令就会被执行,然后一个答复会被返回给客户端。

Zend Framework 2.0 正式版发布及新功能介绍

著名php开源框架Zend Framework经历了长达数年的开发,终于在2012年9月5日正式发布了2.0版本,下简称ZF2。时隔Zend 1.0版本的发布已经有5年之久。php的框架一直都是百家争鸣的,但是作为php官方运维的框架,Zend Framework在php开发者中的流行度并不高。其一是由于Zend Framework主要面向大型应用,对代码规范以及程序结构有严格的规定,入门门槛较高。另一方面还是因为Zend Framework整体的执行效率偏低,略显笨重。

所以Zend小组本次可谓痛定思痛,ZF2并不像其他框架只是修修补补的更新,而是完全重写了ZF1的所有代码,主打的口号就是“高性能”。

来看一看ZF2都带开了哪些新的特性:

1. 模块化(ModuleManager)

比起ZF1来说,ZF2原生支持模块的概念,任意第三方php程序,只要遵循Zend的编码规范和代码结构,都可以变成一个Zend模块。目前已经有一批试验阶段的模块出炉(参看ZF2 Modules)。 其中不乏像Doctrine ORM这样优秀的项目。

可以预见的是,随着ZF2的慢慢成熟,越来越多可以选择的模块将大量涌现,可能未来基于ZF2的项目开发,会像搭积木一样轻松简单。

Category:

支持上传文件的web压力测试方法

1。常用的web压力测试工具有ab(apachebench)和webbench、siege。

常用的web调试工具有wget,curl。

本篇从压力测试的角度讲,以前两者为主,后两者主要列举它们的几个相应的用法。

2、由于网络上少见关于ab 的POST上传文件文章,就先从这个用法说起。

在post上传文件时,需要使用multipart/form-data模式上传,这样服务器端才能正确识别上传的文件信息。

命令行:ab -v 2 -T "multipart/form-data; boundary=---1234abcd" -p ~/abpost.txt http://yourhost/upload.php

在进行压力测试的时候,可以添加-n 500 -c 5参数,执行并发为5的请求,累计发出500次请求。

3、abpost.txt文件内容(注意不需要带==的头尾两行):

注:前面3个是普通的字符串值,最后一个是文件上传域。

=====开始==========

drupal的中文搜索模块向7.x迁移

本站CMS升级到drupal-7.x,不过中文搜索模块(Chinese Splitter)没有赶上来,不能直接使用。

今天抽了点时间试着升级中文搜索模块,由于搜索模块用到的drupal依赖功能比较少,

很容易从原来的6.x版本升级到了7.x版本。

升级修改步骤:

×) 修改版本信息

修改csplitter/csplitter.module中的版本号为7.x

×)模块放在module/csplitter目录

×)在drupal后台安装模块,即可使用。

遇到的程序BUG与修正:

×) 是因为单词拼写错误

Notice: Use of undefined constant fasle - assumed 'fasle' in _csplitter_splite_2() (line 349 of /home/gzleo/workspace/cms-drupal/modules/csplitter/csplitter.module).

×) $outstr 变量没有初始化,在478行if ($len > 1)语句之前,变量使用前初始化一下, $outstr = ' ';

Category:

subversion服务器升级记录

背景;

本是升级次从subversion-1.6到subversion-1.7升级

服务器端svn与apache2.2整合,使用authz用户认证机制。

由于这个svn服务器有一个团队几十个人在使用,需要非常小心

在动手升级之前,查阅subversion-1.7文档,发现svn版本库不完成兼容,

不需要升级,这还好办一点了。

但是客户端的svn库是需要升级的,是什么问题呢,

就是自动分发系统从svn中检出代码,暂时放在服务器上,这与安装的svn客户端版本有关系。

svn客户端命令从1.6到1.7,版本数据库格式有不兼容的变化,必须显式使用svn upgrade命令更新,否则无法做其他的svn操作的。

由于整个svn检出库比较大,大概 1.5G,执行svn upgrade耗时比较长,使用的另一种解决方法,先在临时目录检出整个库,完成后替换,这样可异步的升级。

最后一个问题,subversion服务器端与apache整合,也不完全兼容。

在安装完成subversion-1.7与apache整合后,在commit提交代码时一直出现一个svn服务器端错误,如下,

客户端显示:

Category:

PHP系统的效率分析工具

xdebug

facebook的xhprof

纯PHP开发的php-profiler

Category:

写了个opera 用户脚本,让google结果不再经过google链接跳转

很简单的功能,google搜索结果访问的时候总得通过google的链接再跳转到真正的结果地址
目前的情况,访问google次数越多,越容易网络异常,写了个脚本,在点击结果链接的时候,
直接转到结果页面,不用多访问一次google了。

写的比较乱,没有整理,但是挺管用的。

还有一个不完善的地方,对于喜欢右键弹出菜单方式访问结果的用户行为没有处理。

Category:

centos6.2源码安装couchbase

首先,couchbase依赖的组件很多,一般的系统不会自动安装,

并且许多依赖包都是官方repo中没有的,需要从第三方rpm下载站点下载安装。

这些情况导致couchbase全编译比较麻烦,下面需要一步步仔细操作,

预装包:

pyrex

repo-1.15版本

snappy 数据压缩/解压缩库

libtoolize

libcurl, libcurl-devel

erlang, 版本r14+

v8, v8-devel, 版本为v8 3.8+

icu, icu-devel

python-2.x

其中, erlang和snappy需要手动安装,无相应的rpm包。

下载编译工作源代码:

cd /serv/sources/

git clone https://github.com/membase/manifest.git

mkdir couchbase-git

cd couchbase-git

短网址技术常用的Base62编解码

使用Base62能编码出与URL字符不冲突,并且长度与Base64几乎相等的字符串,很有优化与使用便利的优势。

下面示例代码所使用bcmath库,在php4.0.4时已经引入到核心,更新的版本中不需要额外安装bcmath库。

Category:

页面

订阅 RSS - WEB


Main menu 2

by Dr. Radut