thinkphp5集成GatewayWorker全过程

在前几天的博客中波波根据thinkPHP5的官方文档对thinkPHP集成workman做了稍微细致的分享。今天波波就将workman的另一版本GatewayWorker的集成方法分享一下。

thinkphp5集成GatewayWorker

我们知道如果要做实时通信目前PHP语言主要集中在socket和swool两种开发方式上,如果再深究的话,那么两种方式又是可以称为一种。GatewayWorker是workman的另一版本,其优势在于物联网应用开发方面。废话不多讲。集成Gateway的操作步骤如下:

1、准备好一个tp5的项目。

2、SSH登录服务器,切换到项目根目录执行命令:

  1. composer require workerman/gateway-worker

3、在项目运行目录中创建启用文件gateway.php,示例如下:

  1. #!/usr/bin/env php
  2. <?php
  3. /**
  4.  * Created by bobo.
  5.  * DateTime: 2018/10/10 22:32
  6.  * Function:CLI模式下运行
  7.  */
  8. define('APP_PATH', __DIR__ . '/application/');
  9. define('RUNTIME_PATH', __DIR__ . '/runtime/');
  10. define('BIND_MODULE','pigeon/start');
  11. // 加载框架引导文件
  12. require __DIR__ . '/thinkphp/start.php';

4、在/application/pigeon目录下创建Gateway启动的控制器文件Start.php(注意大小写)。

  1. <?php
  2. /**
  3.  * Created by BoBo.
  4.  * Date: 2018/11/15 14:37
  5.  * Function:
  6.  */
  7. namespace app\pigeon\controller;
  8. use \Workerman\Worker;
  9. use \GatewayWorker\Register;
  10. use \Workerman\WebServer;
  11. use \GatewayWorker\Gateway;
  12. use \GatewayWorker\BusinessWorker;
  13. use \Workerman\Autoloader;
  14. class Start extends Worker{
  15.     public function __construct(){
  16.         //初始化register
  17.         new Register('text://0.0.0.0:1238');
  18.         //初始化 bussinessWorker 进程
  19.         $worker = new BusinessWorker();
  20.         $worker->name = 'mygate';
  21.         $worker->count = 4;
  22.         $worker->registerAddress = '127.0.0.1:1238';
  23.         //设置处理业务的类,此处制定Events的命名空间
  24.         $worker->eventHandler = '\app\pigeon\controller\Events';
  25.         // 初始化 gateway 进程
  26.         $gateway = new Gateway("websocket://0.0.0.0:8383");
  27.         $gateway->name = 'pigeon';
  28.         $gateway->count = 4;
  29.         $gateway->lanIp = '127.0.0.1';
  30.         $gateway->startPort = 2900;
  31.         $gateway->pingInterval = 10;
  32.         $gateway->pingData = '{"type":"ping"}';
  33.         $gateway->registerAddress = '127.0.0.1:1238';
  34.         //运行所有Worker;
  35.         Worker::runAll();
  36.     }
  37. }

5、在/application/pigeon目录下创建Gateway的事件处理控制器文件Events.php(注意大小写)。

  1. <?php
  2. /**
  3.  * Created by BoBo.
  4.  * Date: 2018/11/15 14:56
  5.  * Function:事件处理类
  6.  */
  7. namespace app\pigeon\controller;
  8. use GatewayWorker\Lib\Gateway;
  9. class Events {
  10.     /**
  11.      * 当客户端发来消息时触发
  12.      * @param int $client_id 连接id
  13.      * @param mixed $data 具体消息
  14.      */
  15.     public static function onMessage($client_id$data){
  16.         $message = json_decode($data, true);
  17.         Gateway::sendToCurrentClient(json_encode($data));
  18.     }
  19.     /**
  20.      * 当客户端连接时触发
  21.      * 如果业务不需此回调可以删除onConnect
  22.      *
  23.      * @param int $client_id 连接id
  24.      */
  25.     public static function onConnect($client_id)
  26.     {
  27.         Gateway::sendToClient($client_id,json_encode(['status'=>"success",'msg'=>"连接成功"]));
  28.     }
  29.     /**
  30.      * 当连接断开时触发的回调函数
  31.      * @param $connection
  32.      */
  33.     public static function onClose($client_id){
  34.         Gateway::sendToClient($client_id,json_encode(['status'=>"error",'msg'=>"断开连接"]));
  35.     }
  36.     /**
  37.      * 当客户端的连接上发生错误时触发
  38.      * @param $connection
  39.      * @param $code
  40.      * @param $msg
  41.      */
  42.     public static function onError($client_id$code$msg){
  43.         echo "error $code $msg\n";
  44.     }
  45.     /**
  46.      * 每个进程启动
  47.      * @param $worker
  48.      */
  49.     public static function onWorkerStart($worker){
  50.     }
  51. }

6、启动GatewayWorker。(终端中输入如下指令)

  1. php gateway.php start

看到如下画面就表示集成成功了。

thinkphp5集成GatewayWorker全过程

今天的分享就到这里,有空的话再分享双协议下的端口转发,敬请关注。

你想把广告放到这里吗?

发表评论

您必须 登录 才能发表留言!