問題描述
使用laravel框架composer加載workerman/gateway-worker擴展使用workerman做客服系統.通過laravel的command命令: php artisan app:chat start啟動.linux服務器上正常,在window服務器上啟動失敗,無報錯(如下圖)
問題原因
\workerman\Worker.php: 1424
/**
* Get start files for windows.
*
* @return array
*/
public static function getStartFilesForWindows() {
global $argv;
$files = array();
foreach($argv as $file)
{
if(\is_file($file))
{
$files[$file] = $file;
}
}
return $files;
}
代碼如上,函數返回的$files
數組中的文件是用來fork worker進程的.當$argv
數組中無文件名導致返回的$files
為空時就會出現上述問題.
解決方案
注釋掉代碼中對$argv[0]
的賦值,或是直接添加/替換命令執行文件(laravel為artisan; thinkphp為think)到全局數組$argv
中,eg:
global $argv;
//$argv[0] = 'app:chat'; //注釋此行(當$argv[0]初始值就為artisan時)
或
$argv[0] = 'artisan'; //重新賦值可執行命令文件
重新啟動,出現[OK],表示成功.
原文地址: https://www.zhuyilong.我愛你/tech/workerman_windows_start.html