简介
适用于 客户端-服务端 客户端-客户端 一对多 多对多的关系,多个客户端之间的长连接通信,聊天室,在线客服,服务端反向推送播报消息
特性:多进程,长连接,高并发,常驻内存…
- 客户端与worker进程
客户端与worker进程.png - 主进程与worker子进程
主进程与worker子进程.png
使用Workerman可以做很多有趣的事。(工业自动化,互联网工业,PLC机械报警…),通过长连接取数据,操作数据等,但PHP并不适用于工业领域。做一个仿im聊天工具,除了前端展示界面,后端也要考虑全面,更多的依赖于长连接。
本文参考 workerman官方文档
本文参考 thinksocketio - 基于socketio的聊天室Demo
安装Workerman框架
服务端
创建一个文件夹 我这里使用 testWebSocket
1 | mkdir testWebSocket |
- git形式安装(推荐)
1
git clone https://github.com/walkor/Workerman
根据官方文档创建一个示例 在 testWebSocket 下创建一个 PHP文件 test.php
1 |
|
前端测试
前端测试例子代码 直接在Google浏览器执行
1 | ws = new WebSocket("ws://127.0.0.1:2000"); |
效果展示
Workermen框架支持的协议
1 | $websocket_worker = new Worker('websocket://0.0.0.0:2345'); |
整合ThinkPHP
说明
Workermen是一个成熟的单独框架,在ThinkPHP中也可以使用Composer安装对应的扩展来使用,这里使用了针对PHP开发的扩展 PHPSocket.IO。
PHPSocket.IO设计的目标是利用PHP构建能够在不同浏览器和移动设备上良好运行的实时应用,如实时分析系统、在线聊天室、在线客服系统、评论系统、WebIM等。 PHPSocket.IO与workerman的区别是,PHPSocket.IO基于workerman开发,workerman有的特性PHPSocket.IO都支持。 PHPSocket.IO最大的优势是对各种浏览器的兼容性更好。
安装及引用
使用Composer 安装对应的扩展
1 | composer require workerman/phpsocket.io |
在编辑代码时引用对应的扩展即可
1 | use Workerman\Worker; |
服务端
创建一个服务端 application\socketio\controller\server.php
1 |
|
由于 Workermen 是一个独立于PHP程序使用的单一文件,需要单独用一个命令行来启动的,他完全可以独立使用,因此并不推荐使用TP框架来整合,但如果有这个需求,也可以在 /public目录下生成一个文件来绑定控制器,例如绑定 到 socketio/Server
创建文件 public/server.php , 输入以下内容
1 |
|
执行时 直接在Shell中运行该PHP文件即可,剩下的交给TP的机制
1 | cd /public |
结语
根据通信行为可以衍生出各类应用,目前websocket已经是各大公司都需要的技术,会websocket就多了一份机会!