請(qǐng)問這下面說的修改啟動(dòng)文件的ip,是哪個(gè)啟動(dòng)文件?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
失敗原因:
啟動(dòng)腳本ip參數(shù)寫錯(cuò),不是本機(jī)ip,請(qǐng)?zhí)顚懕緳C(jī)ip機(jī)或者填寫?0.0.0.0(表示監(jiān)聽本機(jī)所有ip)即可解決。
提示:Linux系統(tǒng)可以通過命令?ifconfig查看本機(jī)所有網(wǎng)卡ip。
如果您是騰訊云用戶,注意您的公網(wǎng)ip實(shí)際是代理服務(wù)器ip,公網(wǎng)ip并不屬于你的服務(wù)器,所以無法通過公網(wǎng)ip綁定,但是可以通過0.0.0.0來綁定。
1、啟動(dòng)文件都是自己編寫的,名字隨每個(gè)人的喜好而定,所以到底是哪個(gè)啟動(dòng)文件,這得看自己定的什么了。
2、一般默認(rèn)的入口啟動(dòng)文件就是 /path/to/start.php?
3、最笨辦法:?jiǎn)?dòng)文件都是有特點(diǎn)的,你看下官方啟動(dòng)文件長(zhǎng)什么樣,就知道自己的啟動(dòng)文件是什么了。?
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ù)注冊(cè)地址為0.0.0.0:1238,start_register的text協(xié)議為L(zhǎng)inux服務(wù)器的ip。默認(rèn)的啟動(dòng)文件的代碼:
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");
}
// 檢查擴(kuò)展
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");
}
// 標(biāo)記是全局啟動(dòng)
define('GLOBAL_START', 1);
require_once __DIR__ . '/vendor/autoload.php';
// 加載所有Applications//start.php,以便啟動(dòng)所有服務(wù)
foreach(glob(__DIR__.'/Applications//start*.php') as $start_file)
{
require_once $start_file;
}
// 運(yùn)行所有服務(wù)
Worker::runAll();
@5023:
1、start_.php 針對(duì)不同服務(wù)的局部的獨(dú)立啟動(dòng)文件;
2、start.php 則是全局的啟動(dòng)文件,用來一次性啟動(dòng) start_.php 所對(duì)應(yīng)的所有相關(guān)服務(wù);
但是我按照他們的文件操作,我的系統(tǒng)是Linux的,會(huì)報(bào)錯(cuò):Register auth timeout (127.0.0.1). See http://wiki.workerman.net/Error4 for detail
但是我按照他們的文件操作,系統(tǒng)是Linux的,會(huì)報(bào)錯(cuò):Register auth timeout (127.0.0.1). See http://wiki.workerman.net/Error4 for detail
請(qǐng)問我在沒注冊(cè)GatewayWorker之前,MySQL連接操作是沒問題的,但是注冊(cè)之后就出現(xiàn)連接超時(shí)了。
PDOException: SQLSTATE[HY000] [2002] Connection timed out in /home/www/chaobiao. aa.top/mysql-master/src/Connection.php:1711
昨天看了下Worker的源碼,發(fā)現(xiàn)一個(gè)啟動(dòng)文件中不支持多個(gè)Worker實(shí)例,為什么會(huì)這樣?
@614:不好意思,我昨天看的是這段代碼,似乎是windows版本會(huì)這樣!你看看:
/**
* 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");
}
這里有個(gè)明顯的打印,接下去
reset(static::$_workers);
/* @634 Worker $worker /
$worker = current(static::$_workers);
這是僅啟動(dòng)一個(gè)worker!
1、workerman 針對(duì)Linux 和 Windows在進(jìn)程控制方面的實(shí)現(xiàn)是完全不同的,Linux上版的workerman是基于pcntl_ 以及 posix_ 擴(kuò)展系列實(shí)現(xiàn)的多進(jìn)程以及信號(hào)編程,而Windows版的workerman是不支持這些擴(kuò)展的,換句話 Windows版的workerman 是純單進(jìn)程模型。
2、從針對(duì)windows的源碼實(shí)現(xiàn)來看,一個(gè)啟動(dòng)文件確實(shí)不能啟動(dòng)多個(gè)worker實(shí)例,利用的proc_open() 機(jī)制啟動(dòng)的單進(jìn)程模型,所以才有了命令行同時(shí)啟動(dòng)多個(gè)文件來達(dá)到啟動(dòng)多個(gè)實(shí)例這檔子事,比如: php a.php b.php .....; 此外我們也能發(fā)現(xiàn) windows版的workerman 也不支持守護(hù)進(jìn)程、不支持start stop....等等命令,這都是因?yàn)闂l款1的原因,當(dāng)然也不排除可能有其他發(fā)方式可以實(shí)現(xiàn),至少目前Windows版本的workerman是不支持Linux版的很多高級(jí)特性的。