0、检查Linux是否满足workman的环境要求
curl -Ss www.workerman.net | php
看要求的环境是否都是ok。
如果出现:
workman Call to undefined function stream_socket_server()
解决方案:去PHP的配置文件查找disabled_function,去掉stream_socket_server()
1、无法启动
Linux环境下执行php think chat代码会返回:
定位到源码:
我们是用thinkPHP6的自定义命令(php think chat)去启动workman。但是在Linux环境中,workman的底层代码中会读取CLI端输入的参数(start,stop,status,restart)来判断处理操作。如果没有输入任何执行参数,就会返回并提示输入相应参数。
所以自定义命令这里需要设置相应的参数:
protected function configure()
{
$this->setName('startChat')
->addArgument('action', Argument::OPTIONAL, "action start|stop|restart|status|reload")
->addOption('daemon', '-d', Option::VALUE_OPTIONAL, 'daemon')
->setDescription('the startChat command');
}
protected function resetCli()
{
global $argv, $argc;
$file = "{$argv['0']} {$argv['1']}";
$action = $argv['2'];
$extend = empty($argv['3']) ? '' : $argv['3'];
$argv = [];
$argv[] = $file;
$argv[] = $action;
if ($extend)
{
$argv[] = $extend;
}
$argc = count($argv);
$_SERVER['argv'] = $argv;
$_SERVER['argc'] = $argc;
}
protected function execute(Input $input, Output $output)
{
if (strtolower(php_uname('s')) == 'linux') {
$this->resetCli();
}
}
2、启动成功后,无法连接(connect refuse)
这个问题困扰了我一下午。。。。
我尝试过开放安全组、开启防火墙并开放对应端口。都尝试失败。**最后把客户端连接websocket的地址从127.0.0.1改为服务器的IP地址就成功了。**我真的被自己蠢哭了。
开启websocket的服务端代码:
$ws_worker = new Worker("websocket://0.0.0.0:2000");
连接websocket的客户端js代码:
ws = new WebSocket("ws:服务器IP地址:端口号");
3、补习一下防火墙的相关命令
systemctl status firewalld
systemctl start firewalld
firewall-cmd --list-port
firewall-cmd --zone=public --add-port=2000/tcp --permanent
firewall-cmd --reload
firewall-cmd --zone=public --query-port=2000/tcp
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)