您当前位于: 首页 » 我爱PHP » php socket为什么这么慢,直到超时

php socket为什么这么慢,直到超时08/23/2010

问题是出在一次模拟http请求的把戏中,我之前还真没有注意到,但后来还是想明白了,多看看http协议不无坏处。当时我将其记录在内网了,发出来大家参考吧。教训啊,血淋淋的教训

在项目开发过程中,自己写了一个基于HTTP的API,来完成服务器之间的通讯,在直接用socket模拟POST请求的时候,异常缓慢,大约需要5秒钟才有响应(从服务端返回的头部来看:Keep-Alive: timeout=5,max=100),后来用PHP自带的SOAP扩展来完成,结果速度出奇的快!60ms左右。

同样是PHP差别为什么这么大?

后来把我自己写的HTTP头部的connection设置为close,速度也变的非常快,可是调试soap的那个请求,connection是keep-alive的,默认的不声明connection也会被apache设定为keep-alive(http1.1协议默认启用keep-alive),所以,依此解释,自己模拟的POST不会这么慢!

而且,通过ab测试,keep-alive所花费的时间是更短的,可是用php模拟就变的非常的长时间。。。。。。。。。。。。。唉!这到底是个什么诡异的问题呢。。。。

到现在为止,我实际上没有真正找到这个问题的答案,只是暂时的将http头部的connection设为close,使得php socket不会那么慢,个人认为soap的那个请求是客户端主动断开连接了,没有十足的证据。

| 9条评论 标签:  

9条评论
  1. wynn说道:

    至少把相关的具体实现或者代码拿出来交流下才好大家一起找原因,光说这些话没啥意思。

  2. 王金龙说道:

    弱弱的问一下: zendstudio 8 哪里输入验证码啊! 我在preference–>gernal–>licence 并没有找到!

  3. 不告诉你说道:

    呵呵 你把输出缓存打开了 那必须要php执行完了才会输出的 也就是 那个tcp连接断开才会显示的 不是socket慢 是你在傻等 呵呵

  4. Readman说道:

    后来把我自己写的HTTP头部的connection设置为close,速度也变的非常快
    估计tcp在等你php的缓存,然后http就停了

  5. momocha说道:

    我不知道為什麼想不開,非要用php來完成socket

  6. nick说道:

    判断结束是不是根据feof呢,这样只有服务器断开才会等到,keep-alive的话,可以根据服务器响应的content-length,读取这个长度后,直接关闭。

发表评论