关于 tp6 使用 workerman GatewayWorker2

忙于工作,好久没有更新,最近需要用到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
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ThinkPHP 6 中使用 Workerman 实现定时器可以通过添加自定义命令来实现。下面是一个简单的实现步骤: 1. 首先,确保你已经安装了 Workerman 和 think-worker 扩展。可以通过执行以下命令来安装它们: ``` composer require workerman/workerman think-worker ``` 2. 创建一个自定义的命令类来处理定时任务。在 app/command 目录下创建一个名为 Timer.php 的文件,并在该文件中编写以下代码: ```php <?php namespace app\command; use think\console\Command; use think\console\Input; use think\console\Output; class Timer extends Command { protected function configure() { $this->setName('timer:work')->setDescription('Workerman Timer'); } protected function execute(Input $input, Output $output) { $worker = new \Workerman\Worker(); $worker->onWorkerStart = function($worker) { // 在这里编写定时任务的处理逻辑 \Workerman\Lib\Timer::add(1, function() { echo "定时任务执行\n"; }); }; \Workerman\Worker::runAll(); } } ``` 3. 注册自定义命令。在 config/console.php 中的 commands 数组中添加命令类的命名空间路径: ```php 'commands' => [ 'app\command\Timer', ], ``` 4. 运行定时任务。通过执行以下命令来运行定时任务: ``` php think timer:work ``` 这样,定时任务就会在后台运行,并每秒钟执行一次。你可以在 `$worker->onWorkerStart` 回调函数中编写具体的定时任务逻辑。请根据自己的需求进行修改和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值