GatewayWorker 端口号只能开启一个

wangn
// 加载所有Applications/*/start.php,以便启动所有服务
foreach (glob(__DIR__ .'/Application/*/start*.php') as $start_file)
{

    require_once $start_file;
}

加载出所有启动服务

/**
 * This file is part of workerman.
 *
 * Licensed under The MIT License
 * For full copyright and license information, please see the MIT-LICENSE.txt
 * Redistributions of files must retain the above copyright notice.
 *
 * @author walkor<walkor@workerman.net>
 * @copyright walkor<walkor@workerman.net>
 * @link http://www.workerman.net/
 * @license http://www.opensource.org/licenses/mit-license.php MIT License
 */
use \Workerman\Worker;
use \Workerman\WebServer;
use \GatewayWorker\Gateway;
use \GatewayWorker\BusinessWorker;
use \Workerman\Autoloader;

require_once __DIR__ . '/../../vendor/autoload.php';

// WebServer
$web = new WebServer("http://0.0.0.0:55151");
// WebServer进程数量
$web->count = 2;
// 设置站点根目录
$web->addRoot('www.your_domain.com', __DIR__.'/Web');

// 如果不是在根目录启动,则运行runAll方法
if(!defined('GLOBAL_START'))
{
    Worker::runAll();
}use \Workerman\Worker;
use \GatewayWorker\Gateway;
use \Workerman\Autoloader;

require_once __DIR__ . '/../../vendor/autoload.php';

// gateway 进程
$gateway = new Gateway("Websocket://0.0.0.0:7272");
// 设置名称,方便status时查看
$gateway->name = 'ChatGateway';
// 设置进程数,gateway进程数建议与cpu核数相同
$gateway->count = 4;
// 分布式部署时请设置成内网ip(非127.0.0.1)
$gateway->lanIp = '127.0.0.1';
// 内部通讯起始端口。假如$gateway->count=4,起始端口为2300
// 则一般会使用2300 2301 2302 2303 4个端口作为内部通讯端口 
$gateway->startPort = 2300;
// 心跳间隔
$gateway->pingInterval = 10;
// 心跳数据
$gateway->pingData = '{"type":"ping"}';
// 服务注册地址
$gateway->registerAddress = '127.0.0.1:1236';

启动时只开启了 7272端口 端口没有被占用 

4187 4 1
4个回答

xiuwang

start.php 里要定义 define('GLOBAL_START', true);
 
然后每个start_xx.php里末尾都要有
 
// 如果不是在根目录启动,则运行runAll方法
if(!defined('GLOBAL_START'))
{
    Worker::runAll();
}

  • wangn 2019-05-29

    // 标记是全局启动
    define('GLOBAL_START', 1);

    //启动所有服务
    Worker::runAll();

    start.php 加入了这些的

  • 错觉 2020-10-12

    楼主解决了么?

wangn

我有在页面加入你说的所有东西 可是还是没有成功开启别的端口

  • 暂无评论
blogdaren

那你把 start.php 以及所有的 start_xx.php 的完整代码贴出来大家看看。

  • wangn 2019-05-31

    start.php
    <?php
    //错误提示
    ini_set('display_errors', 'on');
    use Workerman\Worker;

    require_once __DIR__ . '/vendor/autoload.php';

    //验证运行操作系统
    if(strpos(strtolower(PHP_OS), 'win') === 0)
    {
    exit("start.php不能在windows系统下直接运行,请先运行start_for_win_bat");
    };

    // 加载所有Applications//start.php,以便启动所有服务
    foreach (glob(__DIR__ .'/Application/
    /start*.php') as $start_file)
    {

    require_once $start_file;

    }
    // 标记是全局启动
    define('GLOBAL_START', 1);

    //启动所有服务
    Worker::runAll();

    start_gateway.php
    <?php
    /**

    require_once __DIR__ . '/../../vendor/autoload.php';

    // gateway 进程
    $gateway = new Gateway("Websocket://0.0.0.0:7272");
    // 设置名称,方便status时查看
    $gateway->name = 'ChatGateway';
    // 设置进程数,gateway进程数建议与cpu核数相同
    $gateway->count = 4;
    // 分布式部署时请设置成内网ip(非127.0.0.1)
    $gateway->lanIp = '127.0.0.1';
    // 内部通讯起始端口。假如$gateway->count=4,起始端口为2300
    // 则一般会使用2300 2301 2302 2303 4个端口作为内部通讯端口
    $gateway->startPort = 2300;
    // 心跳间隔
    $gateway->pingInterval = 10;
    // 心跳数据
    $gateway->pingData = '{"type":"ping"}';
    // 服务注册地址
    $gateway->registerAddress = '127.0.0.1:1236';

    /
    // 当客户端连接上来时,设置连接的onWebSocketConnect,即在websocket握手时的回调
    $gateway->onConnect = function($connection)
    {
    $connection->onWebSocketConnect = function($connection , $http_header)
    {
    // 可以在这里判断连接来源是否合法,不合法就关掉连接
    // $_SERVER['HTTP_ORIGIN']标识来自哪个站点的页面发起的websocket链接
    if($_SERVER['HTTP_ORIGIN'] != 'http://chat.workerman.net')
    {
    $connection->close();
    }
    // onWebSocketConnect 里面$_GET $_SERVER是可用的
    // var_dump($_GET, $_SERVER);
    };
    };
    /

    // 如果不是在根目录启动,则运行runAll方法
    if(!defined('GLOBAL_START'))
    {
    Worker::runAll();
    }

    start_web.php

    <?php
    /**

    require_once __DIR__ . '/../../vendor/autoload.php';

    // WebServer
    $web = new WebServer("http://0.0.0.0:55151");
    // WebServer进程数量
    $web->count = 2;
    // 设置站点根目录
    $web->addRoot('www.your_domain.com', __DIR__.'/Web');

    // 如果不是在根目录启动,则运行runAll方法
    if(!defined('GLOBAL_START'))
    {
    Worker::runAll();
    }

blogdaren

 define('GLOBAL_START', 1);这行代码位置错了,不能随便​乱放,至少必须放在 foreach 语句前面,其实是针对 require_once 设定的。

  • wangn 2019-05-31

    我的天 还真是 感谢 感谢 我说怎么一直都不行 

年代过于久远,无法发表回答
🔝