记录下本人在windows环境下基于laravel GatewayWorker 练习开发的一个聊天demo遇到的问题

一、结合laravel的command命令行控制Gateway

格式太丑了 凑合看:eyes:

class GatewayWorker extends Command
{
     protected $signature = 'gateway-worker:server {action} {--start=all : start}';

     protected $description = '控制gataway-worker的命令程序';

     public function __construct()
     {
          parent::__construct();
     }

     public function handle()
      {
          $a = 1;
          global $argv;
          $action = $this->argument('action');

      // 针对windows, 运行三次,服务分别启动
          if ($action === 'single') {
            $start = $this->option('start');
          if ($start === 'register') {
            $this->startRegister();
          } elseif ($start === 'gateway') {
            $this->startGateWay();
          } elseif ($start === 'worker') {
            $this->startBusinessWorker();
        }

        Worker::runAll();
        return;
      }

      $argv[1] = $action;

      $this->start();
}

windows无法一次启动多个服务,迂回一下用bat一次启动

// start_for_win.bat
start /b php artisan gateway-worker:server single --start=register
start /b php artisan gateway-worker:server single --start=gateway
start /b php artisan gateway-worker:server single --start=worker
pause

二、异常报错

1. 编码错误

socket报错

这个编码错误其实是由于Gateway抛出的错误无法被解析导致。
实际报错进行try catch捕捉

其真实原因进行错误捕捉或者将windows编码设置成utf-8即可 参考: jingyan.baidu.com/article/25648fc1...
windows设置utf-8编码

2. 出现未配置过的端口报错

stream_socket_client(): unable to connect to tcp://127.0.0.1:XXXX (Connection refused)
本人基本上都是这种报错, 1中提到的编码问题解析出来其实也是这样. 检查是否有配置错误

    // windows环境下 如果是从composer引入的gateway 需要修改源码更改默认的注册地址端口, 开发手册上也有写
    //我直接包了一层
    class Gateway extends \GatewayWorker\Lib\Gateway
    {
        public static $registerAddress = '127.0.0.1:XXXX';
    }

三、总结

开发环境无限接近于生产环境真的能省好多事啊 :joy_cat: :sob:

重要的事情说三遍

多看文档! 多看文档! 多看文档!

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 6

换 powershell 启动试试,应该没这类问题

1年前 评论
fofome (楼主) 1年前
Rache1 (作者) 1年前
fofome (楼主) 1年前
porygonCN

这个问题,不用bat启动就行了吧 直接封装command 进行artisan调用不好吗

1年前 评论
fofome (楼主) 1年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!