月度归档:2013年05月

生成 UUID

计划1 直接使用 时间,含微秒 计划2 加上随机数  使用 ab 做并发测试

首先 使用的 Python SocketServer,生成带5位毫秒的时间,使用apache的ab工具,链接数 2000,并发500 ,生成的id写到数据库 mysql。结果 由于buffer的问题,没测试完 Server就Error了。改用 PHP + Apache+mysql

使用 microtime 生成 含 微秒数(3位) 的时间戳,ab 测试 结果 所有id秒数在4秒范围内,其中一秒超过千个(意味着至少有一微秒是重复的)。最大的重复数3个,最多重复是2个,这4秒都有重复数,最多的超过百个微秒重复。 这样看 效果还算可以,相同微秒重复数不多,只是整体重复的个数太多。效果还可以,因为这2000链接用了1.5秒就完成了。

采用计划2

测试 2000 请求 并发 500 没有重复。10000请求,并发 1000,重复了 8个,相同id每组2个。

去掉 substr,测试了5次,都没有重复,一秒最多有2696个(ab显示的每秒并发超过一千),最长id 25个字符(含点号这个共同字符)。效果还行吧。如果加上 UID,没什么问题,一个用户要不是机器人不会达到微秒级。这样 可以去掉 查找 全局重复时间。重复可能性是非常非常小的。若MD5的话(16字符,128位), 总ID数 就和 IPv6的IP地址数一样多,地球上每个人都可以有千万个。

测试用的虚拟机,Centos系统。

ps: 使用 UNIX 时间戳的话,未来二百多年 是可用的(时间戳的秒数有10位,从1900年开始),而目前计算机也只有百多年的历史。所以在系统被淘汰前,使用时间戳是安全的。

apache 配置文件

【window】
工作目录,即程序安装的目录 %apache%
除了 主配置文件,还可以通过 include 指令,加载其他 配置文件
Q0  查看 可选参数        bin\httpd /?  或者  httpd -h  ( 注意 不支持 –help )
Q1  查看 运行时使用的主配置文件
0 apache配置文件的路径在编译时刻指定,也可在启动时重新指定
1 如果运行apache时 通过 -f 参数 指定了 配置文件, 那么 需要 查看运行该程序时的参数
   window 也可以 查看 注册表
   \HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\[server name]\Parameters
   server name 一般是 Apache2.2
2 如果 没有自己指定 配置文件 可以用一个 hack的方法:
   httpd -S 该参数 用来 显示 被成功配置的虚拟主机信息,同时 会显示 所使用的配置文件
3 查看 apache 编译时 使用的选项  bin\httpd -V
   配置文件 默认为程序安装目录的 conf/httpd.conf
Q2  不重启apache,检查apache配置文件语法是否正确
httpd -t [-f  filepath]
如果 显示 Syntax OK 即没问题
【Linux】
Linux 主要使用 %apache%/bin/apachectl
如果使用软件包管理程序安装的 在/usr/bin/apachectl,  可使用 which apachectl 查找
选项同window
查看 启动参数 ps -ef | grep httpd
最后一个方法: 查到 文件系统中所有的httpd.conf,然后重命名,再重启apache,如果启动失败则是那个文件
——
如果通过以上方法,你还没有 找到 主配置文件,欢迎 留言
References:
source server/mpm/winnt/service.c

PHP 异步执行

【需求】
客户端请求处理一个耗时的任务,超过 服务器的超时时间
而 AJAX 虽然可以异步,但不能主动中断与服务器的链接。

【解决】
在服务器端 使用SOCKET模拟客户端 发起一个新的请求,发送数据包后即关闭连接。

【相关技术】
SOCKET: 建立 TCP连接,发送 HTTP消息。
HTTP 协议:
HTTP消息 分为 请求和回复。一个消息只能为其中一种。
HTTP 请求报文格式:

QQ截图20130507233421

* body 可选,比如 POST方法 就存在body,而GET方法 没有body
【PHP 实现】


另外,在 fastcgi 模式下,可以直接使用 fastcgi_finish_request 函数 来关闭与客户端的连接,但继续运行PHP代码。

参考:

http://www.laruence.com/2008/04/14/318.html

http://www.laruence.com/2011/04/13/1991.html