原贴:http://club.phpe.net/index.php?act=ST&f=15&t=14764&s=d60850b1e9f560fed16202431991de22
| 作者 | memcache的长连接表现。他是如何被重用的。 |
| flytod 新手上路 ![]() 组别: 普通会员 发贴: 3 积分: 0 | Posted:2006/12/07 12:50 看了phpmore7,所有又回头看了一下手册里的memcache说明。发现一个以前没有注意到的pconnect()。 所以做了一下测试。 服务器:ubuntu 6.06,apt-get 安装的memcached 客户端:winxp,php 5.1.4 ,下载的php_memcache.dll
浏览器打开页面后,在服务器端通过# netstat -a |grep 11211查看 使用connect,打开一个窗口,结果是:
浏览完成,再查看,链接已经没有了。
打开两个窗口,看见两个不同的链接,本地端口于上次2651不同,证明是新建立的
更换成pconnect后: 一个窗口浏览时:
浏览结束后,再查看,链接依然存在
新开两个窗口浏览,重用了前一个,再新建立了一个。
这个长链接是如何被重用的,是怎么在两次http请求之间保持的?是否和mysql的pconnect()是同样性质的吗? |
| static 正式会员 ![]() ![]() 组别: 普通会员 发贴: 805 积分: 18 | Posted:2006/12/07 20:06 没读过代码, 估计一样, 因为没别的可能性 |
| Ben 正式会员 ![]() ![]() 组别: 普通会员 发贴: 93 积分: 2 | Posted:2006/12/15 12:29 没有看过 mysql pconnect的代码,不清楚 mysql pconnet 的实现,只是这两天在考虑给 memcache 添加一个同步啊、日志啊什么的功能,所以就瞅了下代码。 persistent 为 false 时的表现是很好理解的,请求来了就连接。请求完毕就关闭对 memcache server 的连接。至于 persistent 为 true 的情况,处理也是比较简单的。一个 memcache 的连接 hash 值主要跟 host、port 以及 timeout 有关。有一个连接请求到来时就根据host 和 port 生成一个 hash 值,然后查表。有则取出,没有则新建一个连接,新建后放入连接池。请求关闭时并不关闭对 memcache server 的连接,而是把这个连接(在做一些状态更新后)放入连接池(就是前面提到的那个 hash 表),供下次查询使用。 that's all~ 是否我消失了,你才会知道我的存在…… |
本文探讨了Memcache中长连接(persistent connection)的工作原理及其在PHP中的应用。通过实验对比了普通连接与长连接的行为差异,并详细解释了长连接如何被重用及维护。





7544

被折叠的 条评论
为什么被折叠?



