一般很少有用PHP做服务的, 但是如果你的已有业务逻辑都是PHP实现的, 而现在却需要基于已有的业务逻辑提供一套Socket服务, 怎么办?
当然, 解决方法很多, 但最简单的办法, 还是直接使用PHP做Socket服务.
而这样做要解决的问题有很多, 主要要解决的问题有如下几个:
1. 作为后台服务,需要常驻后台运行, 那么丁点的内存泄露都是不能接受的.
2. 作为后台服务,畸形数据导致进程异常退出, 也是不可接受的.
3. 作为后台服务, 要能做到graceful restart.
4. 作为后台服务, 对资源的使用必须在可接受的范围以内.
最近,我就基于PHP的pcntl扩展实现一个简单的提供Socket服务的框架. 取其名为Mpass(Multi-Processes Socket Server).
主要结构如下:
Mpass
我之前的文章PHP CLI模式下的多进程应用介绍过在PHP做服务的时候如何避免内存泄露, 所以基于此, 再加上PHP5以后的stream_socket_*系列API, 就完成了这一套框架.
至于Graceful restart, 通过pcntl_signal函数, 在接受到restart/shutdown信号时刻, 做关闭清理动作, 保证不会因为重启/关闭而使得正在执行的逻辑出错.
有类似需求的朋友, 可以借鉴.
项目地址&下载地址 : Mpass
Comments
- 2010/10/29, 张二 writes: 哈哈,一楼哦,狂顶一下。
- 2010/10/29, Once writes: 鸟哥V5!
- 2010/10/29, 灵气 writes: 脚本语言做守护还是很轻巧的。
- 2010/10/29, hfcorriez writes: 期待中...
- 2010/10/29, baikaizhlg writes: 鸟哥威武!!
- 2010/10/29, sharmy writes: 太威武了,我手里的项目正在为这个东西头疼,在想要不要用c++做接口,看看这个再说。
- 2010/11/01, 蘑菇姐姐 writes: 顶一下。
- 2010/11/03, grom writes: 我想了解一下这个框架性能如何,支持并发量多少?
过几天跟进看看。
- 2010/11/07, 神仙 writes: 我倒是用libevent扩展做过一个服务。
pcntl就用来变daemon了。
- 2010/11/08, Mpass – PHP做Socket服务的解决方案 » NoNZero's Blog writes: [...] 本文地址: http://www.laruence.com/2010/10/29/1774.html [...]
- 2010/11/09, Mpass – PHP做Socket服务的解决方案 | 路漫漫其修远兮 writes: [...] 作者: laruence 原文地址:http://www.laruence.com/2010/10/29/1774.html [...]
- 2010/11/09, PHP WebService得到通讯的SOAP包内容 | 路漫漫其修远兮 writes: [...] 本文地址: http://www.laruence.com/2010/10/29/1774.html [...]
- 2010/12/09, xi writes: 如何避免内存泄露
从后台程序的框架上讲,分两方面。
一方面,考虑资源的完整释放。这个如果加载了业务代码,风险变得不可控。
所以另一方面,考虑补救方法,当碰到意外的时候,如果处理意外。
个人认为,work进程运行一次就退出,有点性能问题,一般设计运行次数,来解决。
这样,listen进程到work进程的消息传递也是要考虑的。
呵呵,php cli做server。是OK的。
实际项目中有运用,空载来说的话,基本可以达到,c server的平均水平。
- 2011/01/27, 132CC.com » Blog Archive » Mpass – PHP做Socket服务的解决方案 writes: [...] 本文地址: http://www.laruence.com/2010/10/29/1774.html [...]
- 2011/01/27, 132CC.com » Blog Archive » 又一个PHP低概率Core的分析(PHP内存管理) writes: [...] Mpass – PHP做Socket服务的解决方案 Copyright © 2010 风雪之隅 版权所有, 转载务必注明. 该Feed只供个人使用, 禁止未注明的转载或商业应用. 非法应用的, 一切法律后果自负. 如有问题, 可发E-mail至my at laruence.com.(Digital Fingerprint: 73540ba0a1738d7d07d4b6038d5615e2) [...]
- 2011/03/09, 小桑 writes: 我想问下博主你那结构图用神马工具做的....
- 2011/03/09, 雪候鸟 writes: @小桑 xmind
Related posts:
Copyright © 2010 风雪之隅 版权所有, 转载务必注明. 该Feed只供个人使用, 禁止未注明的转载或商业应用. 非法应用的, 一切法律后果自负. 如有问题, 可发E-mail至my at laruence.com.(Digital Fingerprint: 73540ba0a1738d7d07d4b6038d5615e2)Related Posts: