使用 gatewayworkman 实现小蝌蚪聊天室
todo
对 todpolo 项目的前端不是特别理解, 10几个js文件, 什么时候兴趣来了再折腾一下.
workman 的一点理解
- 典型的
master - worker设计, master负责进程管理, worker 负责具体业务(简单而言就是接受client的socket通信的) - 传统php程序(大部分框架都是基于此)都是运行在 Apache/nginx 容器中, 即作为 http 应用, 不适用于 长连接 / 双向通信 场景, workman是php socket 框架, 支持各种常见协议, 并可以自定义协议.
- 常见协议: tcp / udp; http / websocket
- 自定义协议: 首部固定长度; 首部UInt32; 二进制文件上传; 文本协议( json + \n 结尾)
gatewayworker 的一点理解
- 进程模型: Gateway进程和Worker进程和register注册服务进程, gateway 负责网络IO, worker 负责业务处理, register 负责注册2者之前的通讯
- 实际就是对 workman 的封装, 将业务细化(模块化)了, 好处是可以分开部署各自负责, 更加灵活, 但是需要增加2者进程间的通信
todpole 项目结构分析
workspace/ 新建一个目录作为工作目录 GatewayWorker/ gatewayworker 官方源码 Workerman/ workerman 官方源码 Todpolo/ todpolo项目根目录 web/ 前端目录 start_register.php 起 register 进程, 注册一个 文本协议 地址(ip+port) 用来通信 start_gateway.php 起 gateway 进程, 负责 client 的连接 start_web.php 起 web 进程, 用来作为 webserver start_businessworker.php 起 worker 进程 Event.php server端的业务逻辑可以看出来: server端轻松得不要不要的.
todpolo server端
server端极其简单: 前4个start_ 开头的脚本就是按照 gatewayworker 架构起进程, Event.php 里面才是业务逻辑, 这里只有 4 条(还包括了 client 的 connect + close)
todpolo client端
client端包括 web页面 + ws client 端通信 + 蝌蚪动画, 光看这十来个js文件, 任务量就不小, 具体参考我的 百度脑图