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.pswp.cn/news/281266.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/281266.shtml
英文地址,請注明出處:http://en.pswp.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…