buexplain / netsvr-business-coroutine
这是一个基于hyperf框架开发的,可以快速开发websocket全双工通信业务的包,它基于https://github.com/buexplain/netsvr进行工作。
v1.0.0
2023-12-23 03:47 UTC
Requires
- php: >=8.1
- buexplain/netsvr-protocol-php: ^v2.0.1
- psr/container: ^2.0
- psr/log: ^3.0
Requires (Dev)
- google/protobuf: ~3.22
- hyperf/command: ~3.1
- hyperf/config: ~3.1
- hyperf/event: ~3.1
- hyperf/framework: ~3.1
- hyperf/process: ~3.1
- hyperf/server: ~3.1
- hyperf/signal: ~3.1
- illuminate/container: ^10.0
- phpunit/phpunit: ^10.0
- phrity/websocket: ^1.7
- swoole/ide-helper: *
- swow/swow: ^1.4.0
README
这是一个基于hyperf框架开发的,可以快速开发websocket全双工通信业务的包,它基于https://github.com/buexplain/netsvr 进行工作。
ps:如果你的项目是非协程的,串行执行php代码的,则可以使用这个包:https://github.com/buexplain/netsvr-business-serial
使用步骤
- 下载并启动网关服务:https://github.com/buexplain/netsvr/releases ,该服务会启动:websocket服务器、worker服务器
- 在hyperf项目里面安装本包以及protobuf包:
composer require buexplain/netsvr-business-coroutine
php bin/hyperf.php vendor:publish buexplain/netsvr-business-coroutine
composer require google/protobuf
- 修改配置文件
config/autoload/business.php
,把里面的网关ip、port改成网关服务的worker服务器地址 - 执行启动命令:
php bin/hyperf.php business:start
- 打开一个在线测试websocket的网页,连接到网关服务的websocket服务器,发送消息:
001你好
,注意这个001
就是配置文件config/autoload/business.php
里面的workerId
,如果workerId
不足三位,则需要补到三位,示例代码是:str_pad((string)$workerId, 3, '0', STR_PAD_LEFT)
本包的三种使用方式
如果你的项目需要接收网关主动发过来的消息,则你可以采用以下两种方式:
- 直接启动,执行启动命令:
php bin/hyperf.php business:start
,该命令会用swoole的进程池组件启动若干个进程,每个进程都与网关建立tcp连接,该tcp连接用于接收网关主动发过来的消息 - 跟随http服务器启动,配置文件
listeners.php
添加配置\NetsvrBusiness\Listener\StartMainSocketListener::class
用于在每个worker进程内部与网关建立tcp连接,该tcp连接用于接收网关主动发过来的消息
如果你的项目不需要接收网关主动发过来的消息,则你不需要做任何启动动作,直接使用\NetsvrBusiness\NetBus
提供的静态方法与网关交互。
进程停止时候优雅断开与网关的连接
如果安装你的项目安装了composer require hyperf/signal
包,则配置文件signal.php
必须添加配置\NetsvrBusiness\Handler\StopHandler::class=>1
.
反之,不必做任何配置,本包的\NetsvrBusiness\Listener\CloseListener::class
会自行处理.
如何跑本包的测试用例
- 下载网关服务的
v3.0.0
版本及以上的程序包 - 修改配置文件
netsvr.toml
ConnOpenCustomUniqIdKey
改为ConnOpenCustomUniqIdKey = "uniqId"
ServerId
改为ServerId=0
ConnOpenWorkerId
改为ConnOpenWorkerId=0
ConnCloseWorkerId
改为ConnCloseWorkerId=0
- 执行命令:
netsvr-windows-amd64.bin -config configs/netsvr.toml
启动网关服务,注意我这个命令是windows系统的,其它系统的,自己替换成对应的网关服务程序包即可 - 完成以上步骤后,就启动好一个网关服务了,接下来再启动一个网关服务,目的是测试本包在网关服务多机部署下的正确性
- 复制一份
netsvr.toml
为netsvr-607.toml
,并改动里面的606
系列端口的为607
系列端口,避免端口冲突;ServerId
项改为ServerId=1
,避免网关唯一id冲突 - 执行命令:
netsvr-windows-amd64.bin -config configs/netsvr-607.toml
启动第二个网关服务,注意我这个命令是windows系统的,其它系统的,自己替换成对应的网关服务程序包即可 - 完成以上步骤后,两个网关服务启动完毕,算是准备好了网关这块的环境
- 安装swow扩展,测试代码是基于swow扩展编写的,之所以不采用swoole进行测试,是因为swow比较方便,不需要协程容器即可运行
- 执行本包的测试命令:
composer test
,或者执行命令:php -d extension=swow .\vendor\bin\phpunit --configuration phpunit.xml --log-events-verbose-text phpunit.log
,等待一段时间,即可看到测试结果