linux 上部署的时候没有显示worker listen那些值

小宇宙

php start.php start -d

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.

2743 4 0
4个回答

blogdaren

方便的话,贴下完整的 start .php 内容。

  • 小宇宙 2019-01-17

    大佬,这个问题我解决了,是因为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();
    }

  • blogdaren 2019-01-17

    ws://127.0.0.1:8282, 其中的 127.0.0.1是本地回环地址,非单机部署,这里肯定不能填写 127.0.0.1

  • 小宇宙 2019-01-17

    @614:大佬,我前端的代码和后端都在同一台服务器上,而且我是单机部署啊

  • blogdaren 2019-01-17

    @5334: 防火墙放行8282端口了吗?

  • 小宇宙 2019-01-18

    我阿里云和宝塔的端口都放开了,用公网的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]
 

  • 暂无评论
静默

浏览器所在电脑和服务器不是一台吧

  • 小宇宙 2019-01-18

    您好,您的意思是我线上页面上的JS代码和服务端在同一台服务器上也不能用new WebSocket('ws://127.0.0.1:8282'),而是应该用公网的IP是吗

blogdaren
  1. 是否能这样使用,和js代码是否和服务端在同一机器并没有什么关系。

  2. 首先你应用面向的浏览器客户端,对于js代码无论是内嵌服务端脚本编写还是本地纯html渲染,最终都是吐给浏览器渲染的,交由浏览器发起相应请求。

  3. 换句话关注的是你浏览器客户端所在的主机和服务端提供服务的主机是否在同一台机器,如果在就可以用127.0.0.1,否则就用对应服务器主机IP去连。

  • 暂无评论
年代过于久远,无法发表回答
🔝