【长连接】基于workerman + PHP实现聊天及服务端主动推送消息

序言:
workerman是一个高性能的PHP socket 服务器框架,workerman基于PHP多进程以及libevent事件轮询库,PHP开发者只要实现一两个接口,便可以开发出自己的网络应用。
workerman的目标是让PHP开发者更容易的开发出基于socket的高性能的应用服务,而不用去了解PHP socket以及PHP多进程细节。 
workerman本身是一个PHP多进程服务器框架,具有PHP进程管理以及socket通信的模块,所以不依赖php-fpm、nginx或者apache等这些容器便可以独立运行。


百度云链接:https://pan.baidu.com/s/13_qgYDRgNVvEWCK6mYASsg
密码:0hvt


关于WorkerMan依赖的扩展
运行 php -m 会列出命令行 PHP CLI 已经安装的扩展,结果类似如下:

1531275977997082.png


1、pcntl扩展
pcntl扩展是PHP在Linux环境下进程控制的重要扩展,WorkerMan用到了其进程创建、信号控制、定时器、进程状态监控等特性。此扩展win平台不支持。

2、posix扩展
posix扩展使得PHP在Linux环境可以调用系统通过POSIX标准提供的接口。WorkerMan主要使用了其相关的接口实现了守护进程化、用户组控制等功能。此扩展win平台不支持。

3、libevent扩展 或者 Event扩展
libevent扩展(或者event扩展)使得PHP可以使用系统Epoll、Kqueue等高级事件处理机制,能够显著提高WorkerMan在高并发连接时CPU利用率。在高并发长连接相关应用中非常重要。libevent扩展(或者event扩展)不是必须的,如果没安装,则默认使用PHP原生Select事件处理机制。


启动与停止

这里以workerman-chat为例,它的启动入口为start.php。

启动
以debug(调试)方式启动
php start.php start

以daemon(守护进程)方式启动
php start.php start -d

停止
php start.php stop

重启
php start.php restart

平滑重启
php start.php reload

查看状态
php start.php status


业务开发只需要关注 Applications/项目/Events.php一个文件即可。
业务开发只需要关注 Applications/项目/Events.php一个文件即可。
业务开发只需要关注 Applications/项目/Events.php一个文件即可。


将使用到的端口打开,保证没有占用
下面是start_gateway.php的配置

1531277162969828.png


进入workerman目录,启动GatewayWorker

1531277352693611.png

1531277602993115.png


打开前端页面,可以看到已经接收到服务端workerman推送的心跳检测数据了

1531277799251234.png


如果只是做聊天功能,不涉及到服务端主动推送的话,到这里基本就结束了

如果要做服务端主动发起推送,需要在workerman-chat/Applications/Chat/下加一个start_text_gateway.php文件

其实就是开启一个内部Gateway端口,用于推送数据

start_text_gateway.php文件内容如下:

1531277978797888.png


在项目中就可以直接用PHP socket 使用文本协议调用
具体调用方法如下:

1531278179113993.png


在项目API接口返回之前,调用一下上面socket类进行推送,只要前端用户在ws中能接收到消息,那就ok了
如果前端接收不到,可以在workerman-chat/Applications/Chat/Events.php里面的onMessage类打印一下socket收到的消息,再进行一步步调错,在调试的时候,记得不要使用 -d 开启服务,使用守护进程模式的话,无法打印结果!!!

1531278603421001.png


***************当你发现自己的才华撑不起野心时,就请安静下来学习吧***************


客官,点击下方打赏一个呗~

点赞

发表评论