Workerman start in DAEMON mode
------------------------------- WORKERMAN --------------------------------
Workerman version:3.5.17 PHP version:7.0.19
-------------------------------- WORKERS ---------------------------------
proto user worker listen processes status
Input "php start.php stop" to stop. Start success.
方便的话,贴下完整的 start .php 内容。
大佬,这个问题我解决了,是因为foreach(glob(__DIR__ .'/run/start*.php') as $start_file) 这里的路径错了,现在有个新问题,我在js里面new WebSocket('ws://127.0.0.1:8282')IP127.0.0.1的时候会报WebSocket connection to 'ws://127.0.0.1:8282/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED,但是如果改成线上的IP地址就可以,这是我start_gateway.php的代码
use Workerman\Worker;
use Workerman\WebServer;
use GatewayWorker\Gateway;
use GatewayWorker\BusinessWorker;
use Workerman\Autoloader;
// 自动加载类
require_once dirname(__FILE__) . '/../../../vendor/autoload.php';
// gateway 进程,这里使用Text协议,可以用telnet测试
$gateway = new Gateway("Websocket://0.0.0.0:8282");
// gateway名称,status方便查看
$gateway->name = 'YourAppGateway';
// gateway进程数
$gateway->count = 1;
// 本机ip,分布式部署时使用内网ip
$gateway->lanIp = '127.0.0.1';
// 内部通讯起始端口,假如$gateway->count=4,起始端口为4000
// 则一般会使用4000 4001 4002 4003 4个端口作为内部通讯端口
$gateway->startPort = 2900;
// 服务注册地址
$gateway->registerAddress = '127.0.0.1:1233';
// 心跳间隔
$gateway->pingInterval = 10;
// 心跳数据
$gateway->pingData = '{"type":"ping"}';
/
// 当客户端连接上来时,设置连接的onWebSocketConnect,即在websocket握手时的回调
$gateway->onConnect = function($connection)
{
$connection->onWebSocketConnect = function($connection , $http_header)
{
// 可以在这里判断连接来源是否合法,不合法就关掉连接
// $_SERVER['HTTP_ORIGIN']标识来自哪个站点的页面发起的websocket链接
if($_SERVER['HTTP_ORIGIN'] != 'http://kedou.workerman.net')
{
$connection->close();
}
// onWebSocketConnect 里面$_GET $_SERVER是可用的
// var_dump($_GET, $_SERVER);
};
};
/
// 如果不是在根目录启动,则运行runAll方法
if(!defined('GLOBAL_START'))
{
Worker::runAll();
}
ws://127.0.0.1:8282, 其中的 127.0.0.1是本地回环地址,非单机部署,这里肯定不能填写 127.0.0.1
@614:大佬,我前端的代码和后端都在同一台服务器上,而且我是单机部署啊
@5334: 防火墙放行8282端口了吗?
我阿里云和宝塔的端口都放开了,用公网的IP加8282端口就能正常连接运行,换127.0.0.1会报WebSocket connection to 'ws://127.0.0.1:8282/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED,你看下我下面端口截图
[attach]1669[/attach]
[attach]1670[/attach]
浏览器所在电脑和服务器不是一台吧
您好,您的意思是我线上页面上的JS代码和服务端在同一台服务器上也不能用new WebSocket('ws://127.0.0.1:8282'),而是应该用公网的IP是吗
是否能这样使用,和js代码是否和服务端在同一机器并没有什么关系。
首先你应用面向的浏览器客户端,对于js代码无论是内嵌服务端脚本编写还是本地纯html渲染,最终都是吐给浏览器渲染的,交由浏览器发起相应请求。
换句话关注的是你浏览器客户端所在的主机和服务端提供服务的主机是否在同一台机器,如果在就可以用127.0.0.1,否则就用对应服务器主机IP去连。