天天看点

Mpass – PHP做Socket服务的解决方案

一般很少有用php做服务的, 但是如果你的已有业务逻辑都是php实现的, 而现在却需要基于已有的业务逻辑提供一套socket服务, 怎么办?

当然, 解决方法很多, 但最简单的办法, 还是直接使用php做socket服务.

而这样做要解决的问题有很多, 主要要解决的问题有如下几个:

1. 作为后台服务,需要常驻后台运行, 那么丁点的内存泄露都是不能接受的.

2. 作为后台服务,畸形数据导致进程异常退出, 也是不可接受的.

3. 作为后台服务, 要能做到graceful restart.

4. 作为后台服务, 对资源的使用必须在可接受的范围以内.

最近,我就基于php的pcntl扩展实现一个简单的提供socket服务的框架. 取其名为mpass(multi-processes socket server).

主要结构如下:

Mpass – PHP做Socket服务的解决方案

mpass

就完成了这一套框架.

至于graceful restart, 通过pcntl_signal函数, 在接受到restart/shutdown信号时刻, 做关闭清理动作, 保证不会因为重启/关闭而使得正在执行的逻辑出错.

有类似需求的朋友, 可以借鉴.