忙于工作,好久没有更新,最近需要用到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


 

到现在,关于开发和搭建的流程就结束了,以上写的是我的个人经验,并不是很完善,如果有错的地方,还请大家多多指点

 

 

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐