有这么一种需求:
一次请求中需要访问相同的mc多次,如果串行来做的话,花费时间很长,如果多次mc连接能同时执行的话,花费时间将接近于一次连接的时间。
我不行每次请求都重新连接mc,希望使用PHP的长连接机制。
问题:
如果使用PHP的长连接,则同一次请求中的多次连接将很难实现,因为第二次pconnect返回的连接不是一条新的连接(不管是pfsockopen、mysql_pconnect 都是如此),所以,我将无法创建多个连接;
如果不使用长连接,则每次请求连接多次mc也是不小的开销。
如果真的能通过长连接来实现,则如果某一次请求需要20个连接,但是这种情况很少见,一般可能只有5个,于是我就要因为这一次请求,在一段时间内多维持15个长连接,确实不是一件愿意接受的事情,于是,我可能采用每个请求最多允许5个连接的方式,如果需要20次访问mc,则平均每个连接访问4次,就是说一半来讲,速度是纯串行的5倍
结论:
PHP长连接和多次连接是没法和平共处的,要想同时多个到相同host:port的连接,其中最多只能有一个长连接
相关知识:
PHP的mysql模块中有一个mysql.max_persistent的配置,就是长连接的最大个数,开始以为到同一个host:port可以有多个长连接,但是怎么也想不通,看了源码才知道,到同一个host:port只能有一个长连接,这里限制的是对不同的host:port产生的长连接。
对于fsockopen打开的长连接是没有明确的个数限制的。