在php laravel中使用workerman,啟動的時候沒有正常顯示監(jiān)聽端口,且不能使用
這是laravel框架中使用:
D:\phpStudy\PHPTutorial\WWW\laravel-t\caige-svn>php artisan Workerman start --daemonize
[1A
[K-----------------------[47;30m WORKERMAN [0m-----------------------------
[0mWorkerman version:3.5.4 PHP version:7.2.1
------------------------[47;30m WORKERS [0m-------------------------------
worker---------------------listen---------------------processes-----------------------status
^C
不在laravel框架(在原生php)中使用
D:\phpStudy\PHPTutorial\WWW>php wm.php start
----------------------------------------- WORKERMAN ------------------------------------------
--------------Workerman version:3.5.1 --------------------- PHP version:7.2.1----------
------------------------------------------- WORKERS ----------------------------------------------
worker --------------------- listen --------------------- processes --------------------- status
none------ websocket://0.0.0.0:2000 -------- 1 ---------------
----------------------------------------------------------------------------------------------------------
workerman啟動 laravel框架中使用沒有在原生中那樣出現(xiàn)監(jiān)聽的對應(yīng)端口。
“none----------- websocket://0.0.0.0:2000 ------------- 1 ----------------------------- ”
這一行
為了回答你這個問題我特地注冊了個賬號.
之前這個問題也困擾了我一段時間,后面放棄了.不過找到問題是因為在windows下面getStartFilesForWindows()這個函數(shù)影響的:
foreach($argv as $file)
{
? ? if(_is_file_($file))//此處會判斷是否是文件,是文件的情況下才會加入數(shù)組中,laravel下面的命令肯定不是文件,所以此處$files就為空了
? ? {
? ? ? ? $files = $file;
? ? }
}
$files為空在windows下就不會fork進程出來了(linux下是不會有這個問題的)
網(wǎng)上提供的教程都是linux下運行的,所以不會有這個問題,在windows上集成就會出現(xiàn)你這個問題!!!!
?
解決方法:
改workerman的代碼就行了:
將Worker.php中1335行的getStartFilesForWindows函數(shù)改成如下寫法即可:
??public static function getStartFilesForWindows() {
? ? ? ? global $argv;
? ? ? ? $files = array();
_//? ? ? ? foreach($argv as $file)
//? ? ? ? {
//? ? ? ? ? ? if(is_file($file))
//? ? ? ? ? ? {
//? ? ? ? ? ? ? ? $files = $file;
//? ? ? ? ? ? }
//? ? ? ? }
? ? ? ??_$file = $argv;
? ? ? ? $files = $file;
? ? ? ? return $files;
? ? }