心寜 发表于 2024-7-6 00:18:31

【workerman】uniapp+thinkPHP5使用GatewayWorker实现实时通讯

前言

之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛,就离不开通讯了,然后我就想到了长连接。这里本人用的是GatewayWorker框架。
什么是GatewayWorker框架?

GatewayWorker是基于Workerman开发的一套TCP长连接的应用框架,实现了单发、群发、广播等接口,内置了mysql类库,GatewayWorker分为Gateway进程和Worker进程,支持分布式部署,能够支持大量的连接数。
GatewayWorker的工作原理


1、启动所有进程(GatewayWorker、business、register)

2、GatewayWorker和business进程启动后向register请求注册

3、register服务收到注册请求后,把所有Gateway的通讯地址保存在内存中同时把内存中所有的Gateway的通讯地址发给business

4、business进程得到所有的Gateway内部通讯地址后进行连接GatewayWorker

5、如果有新的GatewayWorker服务进行register,则将新的Gateway内部通讯地址列表将广播给所有buiness并建立连接

6、如果有GatewayWorker下线,则Register服务会收到通知,会将该GatewayWorker内部通讯地址删除,然后广播新的内部通讯地址列表给所有business

7、此时GatewayWorker与buiness已经建立起长连接

8、客户端的事件及接受的数据全部由GatewayWorker转发给business进行处理。目录结构

├── Applications // 项目应用目录
│   └── YourAppGateway// 建立一个存放workman的目录,名字随意
│       ├── Events.php // 处理主逻辑业务的文件,管理onConnect onMessage onClose 等方法
│       ├── start_gateway.php // gateway进程启动脚本、配置服务注册地址、端口号、进程数等参数
│       ├── start_businessworker.php // 用户进程的启动脚本
│       └── start_register.php // 注册服务的启动脚本

├── start.php // 全局启动脚本,此脚本会依次加载Applications/YourAppGateway/start*.php对所有脚本进行启动

└── vendor    // GatewayWorker框架和Workerman框架源码目录GatewayWorker实现

以宝塔为例
1.安装composer

登录SSH终端,使用以下命令下载Composer的安装脚本:
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"运行下面的命令来安装Composer:
php composer-setup.php --install-dir=/usr/local/bin --filename=composer检查composer版本
composer -v //检查composer版本2.安装workerman

在项目根目录打开宝塔终端,输入以下命令安装workman
composer require topthink/think-worker3.安装GatewayWorker

在项目根目录打开宝塔终端,输入以下命令安装GatewayWorker
composer require workerman/gateway-worker4.实现代码

可以选择官方提供的demo 链接:http://www.workerman.net/download/GatewayWorker.zip
或者使用我根据demo改编而来的
先在项目应用目录(一般是Applications)下新建一个文件存储以下四个进程文件
start_gateway.php
页: [1]
查看完整版本: 【workerman】uniapp+thinkPHP5使用GatewayWorker实现实时通讯