关于 tp6 使用 workerman GatewayWorker2
忙于工作,好久没有更新,最近需要用到tcp协议,经过决定后选择了 workerman 的GatewayWorker 框架首先 官方文档要多读多看http://doc2.workerman.net/首先, 进入tp根目录安装workerman 我使用的是这个命令,不会使用的composer的 去百度查看composer require topthink/think-worker安装之后首先去把Eve
忙于工作,好久没有更新,最近需要用到tcp协议,经过决定后选择了 workerman 的 GatewayWorker 框架
首先 官方文档要多读多看 http://doc2.workerman.net/
首先, 进入tp根目录安装workerman 我使用的是这个命令,不会使用的composer的 去百度查看
composer require topthink/think-worker
安装之后首先去把Events.php 文件复制出来。
我个人复制到common目录下
然后去config目录修改 gateway_worker.confg 文件 监听端口就是你tcp服务启动时用的端口,心跳时间也是在这里设置
如果用的linux服务器 记得查看是防火墙否打开端口
至此。准备工作基本完成,接下来就打开你复制的Events文件 ,所有业务就基本都是在此文件进行处理,里面都有方法注释就不详细解释,只介绍我用到的 ,其中心跳时间设置也在上方图中文件设置
首先是心跳机制 关于心跳机制的说明 一种方法是 服务器下发给设备,不建议使用,安装后默认开启。 服务启动后 应该会自动发
还有一种是 设备发给服务端,服务端检测心跳停止 触发 onClose 方法,下面是心跳的说明
下面的代码是我目前所用到的,分别是 服务端接受设备发来的消息,然后进行业务逻辑处理,和设备退出以及心跳中断的方法
/**
* onMessage 事件回调
* 当客户端发来数据(Gateway进程收到数据)后触发
*
* @access public
* @param int $client_id
* @param mixed $data
* @return void
*/
public static function onMessage($client_id, $data)
{
//把设备的信息发送到 模型进行业务逻辑
$model = new model();
//$data 为设备的信息
//$client_id 为设备登陆的链接号,在登录期间一个设备只会有一个
$model->model($data , $client_id);
//Gateway::sendToClient($client_id , $data);
}
/**
* onClose 事件回调 当用户断开连接时触发的方法
* 当正常设备断开会发送退出信息。服务器根据此方法进行业务处理 ,当没有心跳时也会触发此方法
*
* @param integer $client_id 断开连接的客户端client_id
* @return void
*/
public static function onClose($client_id)
{
$model = new model();
$model->model($client_id);
// GateWay::sendToAll("client[$client_id] logout\n");
}
至此,准备工作基本完成 接下来就是去服务器进行workerman 启动
// start 启动 stop 停止 restart 重启
php think worker:gateway start
如果是Windows的话会报错
GatewayWorker Not Support On Windows.
此错误的原因是 tp框架在Windows环境 无法执行这个命令,如果非要在Windows下在执行Tp命令的话 ,需要创建tp自定义指令 具体怎么创建有兴趣的搜索一下
还有一种方法是
使用windows 包运行,此包不基于tp框架,但是可以用于测试 ,下载地址为 下载后一定要先解压然后运行bat文件即可 有兴趣打赏我 1 积分的也可以csdn下载
https://download.csdn.net/download/qq_24447851/13696349
下面的是官方下载
http://www.workerman.net/download/GatewayWorker-for-win.zip
如果是Linux的话
首先cd 到项目的根目录 然后执行 此命令是以debug模式运行 代码报错的话会直接终止运行并显示错误信息
当出现下面的截图就是运行成功
到了这一步,环境可以说是搭建完成,服务也运行成功,可以进行开发了,如果需要服务端发给客户端命令的话需要用
use GatewayWorker\Lib\Gateway;
//$client_id 为设备连接号,设备登录之后会有
//$info 为下发的信息,自定义
Gateway::sendToClient($client_id, $info);
以下是 官方文档中记录的发送消息的代码 ,有兴趣的可以去看看
http://doc2.workerman.net/push-in-other-project.html
此处更新一个还不错的测试工具 需要的 百度搜索 NetAssist
到现在,关于开发和搭建的流程就结束了,以上写的是我的个人经验,并不是很完善,如果有错的地方,还请大家多多指点
更多推荐
所有评论(0)