请问这下面说的修改启动文件的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
关键字:Cannot assign requested address
失败原因:
启动脚本ip参数写错,不是本机ip,请填写本机ip机或者填写 0.0.0.0(表示监听本机所有ip)即可解决。
提示:Linux系统可以通过命令 ifconfig查看本机所有网卡ip。
如果您是腾讯云用户,注意您的公网ip实际是代理服务器ip,公网ip并不属于你的服务器,所以无法通过公网ip绑定,但是可以通过0.0.0.0来绑定。
1、启动文件都是自己编写的,名字随每个人的喜好而定,所以到底是哪个启动文件,这得看自己定的什么了。
2、一般默认的入口启动文件就是 /path/to/start.php
3、最笨办法:启动文件都是有特点的,你看下官方启动文件长什么样,就知道自己的启动文件是什么了。
4、服务端要监听的IP就是比如 new Worker("tcp://x.x.x.x:8888") 中的 x.x.x.x
我是直接在网上下载的GatewayWorker文件夹,我是在Event.php文件做逻辑判断的,其次就是修改了start_businessworker和start_gateway的服务注册地址为0.0.0.0:1238,start_register的text协议为Linux服务器的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,以便启动所有服务
foreach(glob(__DIR__.'/Applications//start*.php') as $start_file)
{
require_once $start_file;
}
// 运行所有服务
Worker::runAll();
@5023:
1、start_.php 针对不同服务的局部的独立启动文件;
2、start.php 则是全局的启动文件,用来一次性启动 start_.php 所对应的所有相关服务;
谢谢,终于明白start.php 的作用了
但是我按照他们的文件操作,我的系统是Linux的,会报错:Register auth timeout (127.0.0.1). See http://wiki.workerman.net/Error4 for detail
@5023: 不客气
但是我按照他们的文件操作,系统是Linux的,会报错:Register auth timeout (127.0.0.1). See http://wiki.workerman.net/Error4 for detail
@5023: http://wiki.workerman.net/Error4 原因说的很清楚啊
请问我在没注册GatewayWorker之前,MySQL连接操作是没问题的,但是注册之后就出现连接超时了。
PDOException: SQLSTATE[HY000] [2002] Connection timed out in /home/www/chaobiao. aa.top/mysql-master/src/Connection.php:1711
@5023: 什么是没注册 GatewayWorker 之前? 没听懂, 最好能贴下样板代码。
昨天看了下Worker的源码,发现一个启动文件中不支持多个Worker实例,为什么会这样?
@622: 是你理解错了吧,一直都支持。
@614:不好意思,我昨天看的是这段代码,似乎是windows版本会这样!你看看:
@622: 我不玩windows, 针对window平台的实现这块儿不了解,所以不敢妄言。
@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在进程控制方面的实现是完全不同的,Linux上版的workerman是基于pcntl_ 以及 posix_ 扩展系列实现的多进程以及信号编程,而Windows版的workerman是不支持这些扩展的,换句话 Windows版的workerman 是纯单进程模型。
2、从针对windows的源码实现来看,一个启动文件确实不能启动多个worker实例,利用的proc_open() 机制启动的单进程模型,所以才有了命令行同时启动多个文件来达到启动多个实例这档子事,比如: php a.php b.php .....; 此外我们也能发现 windows版的workerman 也不支持守护进程、不支持start stop....等等命令,这都是因为条款1的原因,当然也不排除可能有其他发方式可以实现,至少目前Windows版本的workerman是不支持Linux版的很多高级特性的。