美文网首页
TP5 集成 WorkerMan 以及 GatewayWorke

TP5 集成 WorkerMan 以及 GatewayWorke

作者: astarblog | 来源:发表于2018-11-03 13:18 被阅读0次

    一. 基础

    1. workerman

    workerman是国人开发的良心高性能的PHP socket 服务器框架,在全球最大同性交友平台gayHub的star都4K多,可以想象是多么的牛X。

    可以单独部署,也可以整合进MVC的框架(TP,laravel等),可以说非常实用,并发效果也好。

    官网地址:

    gayhub地址:

    2. gateway-worker

    gateway-worker(后面直接称gateway)是基于 workerman开发的TCP长连接框架,用于快速开发TCP长连接应用。

    在线聊天一般都是实用长连接保持通信,使用 workerman虽然能够做到同样的效果,但是gateway更加的方便快捷。

    (轮询构建的聊天室已经OUT了,实在是太...)

    gayhub地址:

    3. gatewayClient

    gateClient是用来辅助 workerman或者是gateway进行用户分组以及向用户发送信息的组件,同时,能够快速便捷的将原有系统的uid和clientid绑定起来。

    gayhub地址:

    二. 安装类库

    1. workerman

    • linux
    composer require topthink/think-worker
    
    • WINDOWS
    composer require workerman/workerman-for-win
    

    如果用的是TP5.0.X 安装的时候可能不成功,因为composer默认安装的最新版,也就是workerm的2.0.X版,所以需要

    composer require topthink/think-worker v1.0.1
    

    加上对应的版本号

    2. gateway-worker

    • linux
    composer require gateway-worker
    
    • WINDOWS
    composer require gateway-worker-for-win
    

    3. gatewayClient

    composer require workerman/gatewayclient
    

    三. 集成

    • workerman

    主要做信息推送

    TP5相关文档:https://www.kancloud.cn/manual/thinkphp5/235128
    具体操作

    1. 在项目根目录新建server.php文件,文件内容为:
    <?php
    define('APP_PATH', __DIR__ . '/application/');
    define('BIND_MODULE','push/Worker');
    // 加载框架引导文件
    require __DIR__ . '/thinkphp/start.php';
    

    2.在项目下的application里新建push文件夹
    3.在新建的push文件夹下面新建controller文件夹,目录结构为\application\push\controller
    4.在刚才的controller文件夹下面新建Worker.php文件,内容为:

    <?php
    
    namespace app\push\controller;
    
    use think\worker\Server;
    
    class Worker extends Server
    {
        protected $socket = 'websocket://0.0.0.0:2346';
    
        /**
         * 收到信息
         * @param $connection
         * @param $data
         */
        public function onMessage($connection, $data)
        {
            $connection->send('我收到你的信息了');
        }
    
        /**
         * 当连接建立时触发的回调函数
         * @param $connection
         */
        public function onConnect($connection)
        {
            $connection->send('正在连接');
        }
    
        /**
         * 当连接断开时触发的回调函数
         * @param $connection
         */
        public function onClose($connection)
        {
            $connection->send('连接关闭');
            $connection->close();
        }
    
        /**
         * 当客户端的连接上发生错误时触发
         * @param $connection
         * @param $code
         * @param $msg
         */
        public function onError($connection, $code, $msg)
        {
            echo "error $code $msg\n";
        }
    
        /**
         * 每个进程启动
         * @param $worker
         */
        public function onWorkerStart($worker)
        {
    
        }
    }
    
    

    5.上面都弄好后,就可以到项目目录里,启动监听服务

    php server.php
    

    6.运行成功后会出现类型于下图,如果报错可能是防火墙或端口没开放等,具体问题具体分析


    image

    7.客户端可以连接方式

    ws = new WebSocket("ws://127.0.0.1:2346");
    ws.onopen = function() {
       alert("连接成功");
       ws.send('tom');
       alert("给服务端发送一个字符串:tom");
    };
    ws.onmessage = function(e) {
       alert("收到服务端的消息:" + e.data);
    };
    
    • gateway-worker

    主要做单聊,群聊和广播

    由于通过composer安装时只下载了核心类,我们可以下载一些demo来进行配置

    1. 去官网下载Windows版的gateway-worker,里面有demo。http://www.workerman.net/download
    2. 将下载的压缩包解压,将Applications/Yourapp中的文件全部复制到thinkphp5目录application/push里面
    3. 将解压后的文件夹中的start_for_win.bat复制到thinkphp5的根目录,即与application同级的目录
    4. 右键start_for_win.bat,点编辑,将里面的目录改成自己的目录,这里改为
    php application\push\start_register.php application\push\start_gateway.php application\push\start_businessworker.php
    Pause
    
    1. 保存退出。双击运行。
    2. linux基本一至,但不用编辑start_for_win.bat文件,直接使用start.php文件
    3. 成功运行后会出现如下图


      image

    via:https://blog.csdn.net/qq_14913213/article/details/77184074

    客户端连接成功后可以通过TP的MVC模式进行发送信息

    <?php
    namespace app\index\controller;
    
    use \GatewayClient\Gateway;
    
    class Index
    {   
        public function send(){
            //绑定端口
            Gateway::$registerAddress = '127.0.0.1:1238';
            // 监查客户端是否在线
            Gateway::isOnline('7f0000010b5400000002')
            // 给所有客户端广播信息
            Gateway::sendToAll("test\r\n");
        }
    }
    

    更多操作方法可以查看

    相关文章

      网友评论

          本文标题:TP5 集成 WorkerMan 以及 GatewayWorke

          本文链接:https://www.haomeiwen.com/subject/pqekxqtx.html