請問這下面說的修改啟動文件的ip,是哪個啟動文件?PHP Warning:? stream_socket_server(): unable to connect to tcp://xx.xx.xx.xx:xxx (Cannot assign requested address) in /home/GatewayWorker/Workerman/Worker.php on line xxxx
關(guān)鍵字:Cannot assign requested address
失敗原因:
啟動腳本ip參數(shù)寫錯,不是本機ip,請?zhí)顚懕緳Cip機或者填寫?0.0.0.0(表示監(jiān)聽本機所有ip)即可解決。
提示:Linux系統(tǒng)可以通過命令?ifconfig查看本機所有網(wǎng)卡ip。
如果您是騰訊云用戶,注意您的公網(wǎng)ip實際是代理服務(wù)器ip,公網(wǎng)ip并不屬于你的服務(wù)器,所以無法通過公網(wǎng)ip綁定,但是可以通過0.0.0.0來綁定。
1、啟動文件都是自己編寫的,名字隨每個人的喜好而定,所以到底是哪個啟動文件,這得看自己定的什么了。
2、一般默認的入口啟動文件就是 /path/to/start.php?
3、最笨辦法:啟動文件都是有特點的,你看下官方啟動文件長什么樣,就知道自己的啟動文件是什么了。?
4、服務(wù)端要監(jiān)聽的IP就是比如? new Worker("tcp://x.x.x.x:8888") 中的? x.x.x.x
我是直接在網(wǎng)上下載的GatewayWorker文件夾,我是在Event.php文件做邏輯判斷的,其次就是修改了start_businessworker和start_gateway的服務(wù)注冊地址為0.0.0.0:1238,start_register的text協(xié)議為Linux服務(wù)器的ip。默認的啟動文件的代碼:
ini_set('display_errors', 'on');
use Workerman\Worker;
if(strpos(strtolower(PHP_OS), 'win') === 0)
{
exit("start.php not support windows, please use start_for_win.bat\n");
}
// 檢查擴展
if(!extension_loaded('pcntl'))
{
exit("Please install pcntl extension. See http://doc3.workerman.net/appendices/install-extension.html\n");
}
if(!extension_loaded('posix'))
{
exit("Please install posix extension. See http://doc3.workerman.net/appendices/install-extension.html\n");
}
// 標記是全局啟動
define('GLOBAL_START', 1);
require_once __DIR__ . '/vendor/autoload.php';
// 加載所有Applications//start.php,以便啟動所有服務(wù)
foreach(glob(__DIR__.'/Applications//start*.php') as $start_file)
{
require_once $start_file;
}
// 運行所有服務(wù)
Worker::runAll();
@5023:
1、start_.php 針對不同服務(wù)的局部的獨立啟動文件;
2、start.php 則是全局的啟動文件,用來一次性啟動 start_.php 所對應(yīng)的所有相關(guān)服務(wù);
但是我按照他們的文件操作,我的系統(tǒng)是Linux的,會報錯:Register auth timeout (127.0.0.1). See http://wiki.workerman.net/Error4 for detail
但是我按照他們的文件操作,系統(tǒng)是Linux的,會報錯:Register auth timeout (127.0.0.1). See http://wiki.workerman.net/Error4 for detail
請問我在沒注冊GatewayWorker之前,MySQL連接操作是沒問題的,但是注冊之后就出現(xiàn)連接超時了。
PDOException: SQLSTATE[HY000] [2002] Connection timed out in /home/www/chaobiao. aa.top/mysql-master/src/Connection.php:1711
@614:不好意思,我昨天看的是這段代碼,似乎是windows版本會這樣!你看看:
/**
* Fork some worker processes.
*
* @return void
*/
protected static function forkWorkersForWindows()
{
$files = static::getStartFilesForWindows();
global $argv;
if(in_array('-q', $argv) || count($files) === 1)
{
if(count(static::$_workers) > 1)
{
static::safeEcho("@@@ Error: multi workers init in one php file are not support @@@\r\n");
static::safeEcho("@@@ Please visit http://wiki.workerman.net/Multi_woker_for_win @@@\r\n");
}
elseif(count(static::$_workers) <= 0)
{
exit("@@@no worker inited@@@\r\n\r\n");
}
reset(static::$_workers);
/** @var Worker $worker */
$worker = current(static::$_workers);
// Display UI.
static::safeEcho(str_pad($worker->name, 21) . str_pad($worker->getSocketName(), 36) . str_pad($worker->count, 10) . "[ok]\n");
$worker->listen();
$worker->run();
exit("@@@child exit@@@\r\n");
}
else
{
static::$globalEvent = new \Workerman\Events\Select();
Timer::init(static::$globalEvent);
foreach($files as $start_file)
{
static::forkOneWorkerForWindows($start_file);
}
}
}
@614:我也不玩windows,僅從這源碼來看,
if(count(static::$_workers) > 1)
{
static::safeEcho("@@@ Error: multi workers init in one php file are not support @@@\r\n");
static::safeEcho("@@@ Please visit http://wiki.workerman.net/Multi_woker_for_win @@@\r\n");
}
這里有個明顯的打印,接下去
reset(static::$_workers);
/* @634 Worker $worker /
$worker = current(static::$_workers);
這是僅啟動一個worker!
1、workerman 針對Linux 和 Windows在進程控制方面的實現(xiàn)是完全不同的,Linux上版的workerman是基于pcntl_ 以及 posix_ 擴展系列實現(xiàn)的多進程以及信號編程,而Windows版的workerman是不支持這些擴展的,換句話 Windows版的workerman 是純單進程模型。
2、從針對windows的源碼實現(xiàn)來看,一個啟動文件確實不能啟動多個worker實例,利用的proc_open() 機制啟動的單進程模型,所以才有了命令行同時啟動多個文件來達到啟動多個實例這檔子事,比如: php a.php b.php .....; 此外我們也能發(fā)現(xiàn) windows版的workerman 也不支持守護進程、不支持start stop....等等命令,這都是因為條款1的原因,當然也不排除可能有其他發(fā)方式可以實現(xiàn),至少目前Windows版本的workerman是不支持Linux版的很多高級特性的。