GatewayWorker Not Support On Windows.

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("<error>Invalid 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/281266.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

8支团队正在努力构建下一代Ethereum

“我们不想在构建 Ethereum 2.0时重新造轮子。” 谈到开发人员为 Ethereum 区块链进行两个独立的升级&#xff08;一个称为 Ethereum 2.0&#xff0c;另一个称为 Ethereum 1x&#xff09;所作出的补充努力&#xff0c;劳尔乔丹坚持认为&#xff0c;在较短的时间内将升级包括在 …

fastjson SerializerFeature详解

名称含义备注QuoteFieldNames输出key时是否使用双引号,默认为true UseSingleQuotes使用单引号而不是双引号,默认为false WriteMapNullValue是否输出值为null的字段,默认为false WriteEnumUsingToStringEnum输出name()或者original,默认为false UseISO8601DateFormatDate使用ISO…

费曼学习法中问题的提出与反问,扩展与主动查询的学习习惯训练过程

在2022年11月05日的对话中&#xff0c;九迁先讲了女娲补天和女娲造人的故事&#xff0c;女娲造人的故事还讲了两个版本的&#xff0c;随后提到了一个事情&#xff0c;那就是&#xff0c;如果你要找一个神仙一起度过一天&#xff0c;你想找谁&#xff0c;想做些什么&#xff1f;…

Fiddle:使用断点:bpu,bpafter

http://www.cnblogs.com/yoyoketang/p/6778006.html转载于:https://www.cnblogs.com/peixianping/p/7230021.html

windows环境下TP5.1使用think-worker(Workerman/GatewayWorker)

文章目录首先是解决如何运行gatewayworker调试gatewayworker程序向指定客户端发送消息在TP框架中调用Gateway的API总结说明测试环境 windows10&#xff1b;PHP7.2&#xff1b;TP5.1&#xff1b; 这里只介绍如何使用TP集成的workerman扩展库think-worker&#xff0c;原生workerm…

webpack之DefinePlugin使用

DefinePlugin是webpack注入全局变量的插件&#xff0c;通常使用该插件来判别代码运行的环境变量。在使用该插件需要注意的是&#xff0c;如果在该插件配置了相关的参数&#xff0c;必须要源码中使用&#xff0c;webpack才会注入。例如&#xff1a; new webpack.DefinePlugin({p…

Magicodes.IE 2.7.0发布

2.7.02022.11.07使用SkiaSharp替代SixLabors.ImageSharp移除SixLabors.Fonts感谢linch90的大力支持&#xff08;具体见pr#462&#xff09;部分方法改为虚方法2.7.0-beta2022.10.27使用SixLabors.ImageSharp替代System.Drawing&#xff0c;感谢linch90 &#xff08;见pr#454&…

Mobx 与 Redux 的性能对比

在本文中你将看到我最终得出的结论是 Mobx 的性能优于 Redux。但很明显这样的结论是片面的&#xff0c;甚至是有失偏颇的&#xff0c;因为我只选取了一个的场景对两者进行测试。可能真实的情况恰恰相反&#xff0c;Mobx 仅仅在我测试的这个场景中优于 Redux&#xff0c;但是在我…

linux lsof/netstat查看进程和端口号相关命令:

本文为博主原创&#xff0c;未经允许不得转载&#xff1a; 在linux操作时&#xff0c;经常要查看运行的项目的进程和端口号&#xff0c;在这里总结了以下常用到的相关命令&#xff1a; 1.查看系统运行的java项目&#xff0c;并查看进程号 这个用到的命令为&#xff1a; ps -ef|…

C#高级编程9 第17章 使用VS2013-C#特性

C#高级编程9 第17章 使用VS2013 编辑定位到 如果默认勾选了这项&#xff0c;请去掉勾选&#xff0c;因为勾选之后解决方案的目录会根据当前文件选中。 可以设置项目并行生成数 版本控制软件设置 所有文本编辑器行号显示 启用编辑继续 收集调试信息&#xff0c;将影响性能 Code …

还在手画C#依赖关系图吗?快来试试这个工具吧!

还在手画C#依赖关系图吗&#xff1f;快来试试这个工具吧&#xff01;笔者最近见到了一个不错的工具&#xff0c;可以让大家在看代码的时候一键生成C#依赖的类图。非常适合编写文档、查看和学习开源项目设计时使用&#xff0c;比如下方就是笔者通过这个工具生成的Microsoft.Exte…

Web服务器 - Apache配置介绍

基本语法 常量的定义与使用&#xff0c;使用关键词 Define 可以定义常量&#xff0c;使用 ${} 插入常量&#xff0c;如下 语法规则说明示列Define定义常量Define SRVROOT “D:/srv/Apache24”${}使用常量ServerRoot “${SRVROOT}”/表示路径时使用 / 而不使用 \D:/srv/Apache…

点火开关分为4个档位,分别是off,acc,IG-on,和ST

off全车除了常火&#xff08;如应急灯&#xff0c;时钟等的记忆功能&#xff09;外&#xff0c;均不供电。acc 是附件档&#xff0c;部分车载附属设备供电&#xff0c;如视听系统&#xff0c;仪表灯&#xff0c;灯光等。也就是说&#xff0c;车停在哪里&#xff0c;发动机不转&…

h5的formData 上传文件及.net后台

先来前端的代码&#xff1a; html 代码&#xff1a; <input type"file" id"files" value"" multiple/> js代码&#xff1a; function init() {var ele_files document.querySelector("#files");ele_files.addEventListener(&qu…

51 Nod 1027 大数乘法【Java大数乱搞】

1027 大数乘法 基准时间限制&#xff1a;1 秒 空间限制&#xff1a;131072 KB 分值: 0 难度&#xff1a;基础题 给出2个大整数A,B&#xff0c;计算A*B的结果。Input第1行&#xff1a;大数A 第2行&#xff1a;大数B (A,B的长度 < 1000&#xff0c;A,B > 0&#xff09; Out…

关于ASP.NET Core WebSocket实现集群的思考

前言提到WebSocket相信大家都听说过&#xff0c;它的初衷是为了解决客户端浏览器与服务端进行双向通信&#xff0c;是在单个TCP连接上进行全双工通讯的协议。在没有WebSocket之前只能通过浏览器到服务端的请求应答模式比如轮询&#xff0c;来实现服务端的变更响应到客户端&…

windows环境下Apache+PHP+MySQL搭建服务器

相关文件下载 下载地址Apachehttps://www.apachehaus.com/cgi-bin/download.plxPHPhttps://windows.php.net/downloadMySQLhttps://dev.mysql.com/downloads/mysql/MySQL MySQL配置 当前使用的MySQL版本是8.0.18&#xff0c;在MySQL根目录下新建my.ini文件&#xff0c;下面是…

angular.js国际化模块

最近需要将一个项目转化成英文的&#xff0c; 于是发现一个angular模块angular-translate&#xff0c;实现如下&#xff1a; 1.安装包 bower install angular-translate bower install angular-translate-loader-static-files //然后在页面引用进去 <script src"/angul…

触屏网站如何实现返回并刷新

目的 在会员中心等页面常常会遇到进入内页修改信息&#xff0c;返回前一个页面需要更新信息的场景。 思路 用COOKIE记录当前页面是否需要刷新&#xff0c;返回之后再刷新一次页面。 方案 下载js.cookie.js然后引入到项目中 https://github.com/js-cookie/js-cookie 先来一个最简…

更快,更强的.NET 7 发布了

.NET Conf 2022 在昨晚(11⽉8⽇) 11 点 正式开始了&#xff0c;为期三天的会议&#xff08;11⽉8-10⽇&#xff09;&#xff0c; 围绕 .NET 7 展开。相信各位⼩伙伴都已经开始安装 .NET 7 正式版本还有以及相关的开发⼯具。这次 .NET 7 围绕传统的 C# &#xff0c;ASP.NET Core…