网站建设客户分析调查表,企业注册资金变更流程,wordpress 网站费用,建e网室内设计thinkphp版本#xff1a;5.1
tp5.1运行命令行php think worker:gateway出现GatewayWorker Not Support On Windows.是因为在tp5.1的命令行中做了判定#xff0c;不支持windows环境下运行。 这里不支持windows环境并不是说gateway worker不支持windows#xff0c;而是tp5.1的…thinkphp版本5.1
tp5.1运行命令行php think worker:gateway出现GatewayWorker Not Support On Windows.是因为在tp5.1的命令行中做了判定不支持windows环境下运行。 这里不支持windows环境并不是说gateway worker不支持windows而是tp5.1的命令行运行方式不支持windows原因是在官方文档中有说明 windows操作系统下无法在一个php文件里初始化多个Worker tp5.1的命令php think worker:gateway就是在同一个php文件里启动了多个worker因为不能成功运行所以tp5.1的命令行提前做了判定显示不支持在windows下运行。
按照官方文档的说明只要分开启动就好了。
解决方案 最简单一点的按照官方文档建立多个文件分开运行worker。 高大上一点的瞎折腾自己写tp的命令行实质还是将多个worker放在不同的文件中运行。
附自定义TP命令行
命令行文件application\common\command\Workerman.php
?phpnamespace app\common\command;use GatewayWorker\BusinessWorker;
use GatewayWorker\Gateway;
use GatewayWorker\Register;
use think\console\Command;
use think\console\Input;
use think\console\input\Argument;
use think\console\input\Option;
use think\console\Output;
use think\facade\Config;
use Workerman\Worker;/*** Worker 命令行*/
class Workerman extends Command
{protected function configure(){$this-setName(workerman)-addArgument(service, Argument::OPTIONAL, workerman service: gateway|register|businessworker, null)-addOption(host, H, Option::VALUE_OPTIONAL, the host of workerman server, null)-addOption(port, P, Option::VALUE_OPTIONAL, the port of workerman server, null)-addOption(daemon, d, Option::VALUE_OPTIONAL, Run the workerman server in daemon mode.)-setDescription(workerman Server for ThinkPHP);}public function execute(Input $input, Output $output){$service $input-getArgument(service);$option Config::pull(gateway_worker);if ($input-hasOption(host)) {$host $input-getOption(host);} else {$host !empty($option[host]) ? $option[host] : 0.0.0.0;}if ($input-hasOption(port)) {$port $input-getOption(port);} else {$port !empty($option[port]) ? $option[port] : 2347;}$registerAddress !empty($option[registerAddress]) ? $option[registerAddress] : 127.0.0.1:1236;switch ($service) {case register:$this-register($registerAddress);break;case businessworker:$this-businessWorker($registerAddress, isset($option[businessWorker]) ? $option[businessWorker] : []);break;case gateway:$this-gateway($registerAddress, $host, $port, $option);break;default:$output-writeln(errorInvalid argument action:{$service}, Expected gateway|register|businessworker ./error);exit(1);break;}Worker::runAll();}/*** 启动register* access public* param string $registerAddress* return void*/public function register($registerAddress){// 初始化registernew Register(text:// . $registerAddress);}/*** 启动businessWorker* access public* param string $registerAddress registerAddress* param array $option 参数* return void*/public function businessWorker($registerAddress, $option []){// 初始化 bussinessWorker 进程$worker new BusinessWorker();$this-option($worker, $option);$worker-registerAddress $registerAddress;}/*** 启动gateway* access public* param string $registerAddress registerAddress* param string $host 服务地址* param integer $port 监听端口* param array $option 参数* return void*/public function gateway($registerAddress, $host, $port, $option []){// 初始化 gateway 进程if (!empty($option[socket])) {$socket $option[socket];unset($option[socket]);} else {$protocol !empty($option[protocol]) ? $option[protocol] : websocket;$socket $protocol . :// . $host . : . $port;unset($option[host], $option[port], $option[protocol]);}$gateway new Gateway($socket, isset($option[context]) ? $option[context] : []);// 以下设置参数都可以在配置文件中重新定义覆盖$gateway-name Gateway;$gateway-count 4;$gateway-lanIp 127.0.0.1;$gateway-startPort 2000;$gateway-pingInterval 30;$gateway-pingNotResponseLimit 0;$gateway-pingData {type:ping};$gateway-registerAddress $registerAddress;// 全局静态属性设置foreach ($option as $name $val) {if (in_array($name, [stdoutFile, daemonize, pidFile, logFile])) {Worker::${$name} $val;unset($option[$name]);}}$this-option($gateway, $option);}/*** 设置参数* access protected* param Worker $worker Worker对象* param array $option 参数* return void*/protected function option($worker, array $option []){// 设置参数if (!empty($option)) {foreach ($option as $key $val) {$worker-$key $val;}}}
}
这个文件放哪里都无所谓只要和对应的command参数配置对应就好了 在application\command.php命令行参数配置文件中添加
return [workerman \\app\\common\\command\\Workerman,
];运行方式 php think workerman gateway|register|businessworker 这里是是直接修改了官方的php think worker:gateway命令因为windows不支持reload等启动方式所以取消了action的启动参数改为了服务名称service例如启动 worker register服务php think workerman register所以在这里得开3个命令窗口分别运行 register、businessworker、gateway