记录下本人在windows环境下基于laravel GatewayWorker 练习开发的一个聊天demo遇到的问题
一、结合laravel的command命令行控制Gateway
格式太丑了 凑合看
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. 编码错误
这个编码错误其实是由于Gateway抛出的错误无法被解析导致。
实际报错进行try catch捕捉
其真实原因进行错误捕捉或者将windows编码设置成utf-8即可 参考: jingyan.baidu.com/article/25648fc1...
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'; }
三、总结
开发环境无限接近于生产环境真的能省好多事啊

重要的事情说三遍
多看文档! 多看文档! 多看文档!
本作品采用《CC 协议》,转载必须注明作者和本文链接
换 powershell 启动试试,应该没这类问题
这个问题,不用bat启动就行了吧 直接封装command 进行artisan调用不好吗