windows下,同一台机器中有多个gateway程序,多个Worker/或者共用同一个Worker【start.bat要有多个】

如题,同一台机器中有:项目一 -> 使用gateway,一个start1.bat;项目二 -> 使用gateway,第二个start2.bat。
运行 start1.bat 测试项目一的时候正常,同时运行 start2.bat 测试项目二时,就会报错 “SendBufferToWorker fail. The connections between Gateway and BusinessWorker are not ready” 。
Applications/App/Config/Store.php 中更改 public static $driver = self::DRIVER_REDIS 又会报错 class redis 不存在

PHP Fatal error: Class 'Redis' not found in D:\···\Server\Gatewa
yWorker\Lib\StoreDriver\Redis.php on line 21


windows下如果需要同时运行多个gateway程序的话,需要做哪些修改呢?
已邀请:

walkor

赞同来自:

两个项目 Config/Store.php 配置不要冲突即可

MyLover - phper

赞同来自:

Applications/项目一/Config/Store.php

class Store
{
// 使用文件存储,注意使用文件存储无法支持workerman分布式部署
const DRIVER_FILE = 1;
// 使用memcache存储,支持workerman分布式部署
const DRIVER_MC = 2;
// 使用redis存储(推荐),支持workerman分布式部署
const DRIVER_REDIS = 3;

// DRIVER_FILE 或者 DRIVER_MC 或者 DRIVER_REDIS(推荐)
public static $driver = self::DRIVER_FILE;

//$driver为DRIVER_MC/DRIVER_REDIS时需要配置memcached/redis服务端ip和端口
public static $gateway = array(
'127.0.0.1:6378',
);

// $driver为DRIVER_FILE时要配置此项,实际配置在最下面一行
public static $storePath = '';
}

// 实际在这里配置的Store::$storePath ,默认为临时目录
Store::$storePath = sys_get_temp_dir().'/TmpZP/';


Applications/项目二/Config/Store.php

class Store
{
// 使用文件存储,注意使用文件存储无法支持workerman分布式部署
const DRIVER_FILE = 1;
// 使用memcache存储,支持workerman分布式部署
const DRIVER_MC = 2;
// 使用redis存储(推荐),支持workerman分布式部署
const DRIVER_REDIS = 3;

// DRIVER_FILE 或者 DRIVER_MC 或者 DRIVER_REDIS(推荐)
public static $driver = self::DRIVER_FILE;

//$driver为DRIVER_MC/DRIVER_REDIS时需要配置memcached/redis服务端ip和端口
public static $gateway = array(
'127.0.0.1:6379',
);

// $driver为DRIVER_FILE时要配置此项,实际配置在最下面一行
public static $storePath = '';
}

// 实际在这里配置的Store::$storePath ,默认为临时目录
Store::$storePath = sys_get_temp_dir().'/TmpSSL/';


这样的配置有问题么?也还是会报错的。。。而且两个里面,项目一的客户端连接时会在项目二的start.bat里面显示已连接,应该是要在项目一的start.bat里面显示已连接的

walkor

赞同来自:

看下项目二的businessworker启动了没
贴下两个项目的启动截面吧

MyLover - phper

赞同来自:

两个项目 bat 启动界面截图

MyLover - phper

赞同来自:

呃,这个····没法解决么

walkor

赞同来自:

贴下两个项目
gateway 启动的代码

MyLover - phper

赞同来自:

两个项目gateway启动代码:
一:

use \Workerman\Worker;
use \Workerman\WebServer;
use \GatewayWorker\Gateway;
use \GatewayWorker\BusinessWorker;
use \Workerman\Autoloader;

// 自动加载类
require_once __DIR__ . '/../../Workerman/Autoloader.php';
Autoloader::setRootPath(__DIR__);

// gateway 进程,这里使用Text协议,可以用telnet测试
$gateway = new Gateway("Text://0.0.0.0:8092");
// gateway名称,status方便查看
$gateway->name = 'ZpGateway';
// gateway进程数
$gateway->count = 4;
// 本机ip,分布式部署时使用内网ip
$gateway->lanIp = '192.168.2.122';
// 内部通讯起始端口,假如$gateway->count=4,起始端口为4000
// 则一般会使用4001 4002 4003 4004 4个端口作为内部通讯端口
$gateway->startPort = 2300;

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



二:

use \Workerman\Worker;
use \Workerman\WebServer;
use \GatewayWorker\Gateway;
use \GatewayWorker\BusinessWorker;
use \Workerman\Autoloader;

// 自动加载类
require_once __DIR__ . '/../../Workerman/Autoloader.php';
Autoloader::setRootPath(__DIR__);

// gateway 进程,这里使用Text协议,可以用telnet测试
$gateway = new Gateway("Text://0.0.0.0:8282");
// $gateway = new Gateway("Websocket://0.0.0.0:8282");
// gateway名称,status方便查看
$gateway->name = 'SSLGatewayServer';
// gateway进程数
$gateway->count = 4;
// 本机ip,分布式部署时使用内网ip
// $gateway->lanIp = '127.0.0.1';
$gateway->lanIp = '192.168.2.122';
// 内部通讯起始端口,假如$gateway->count=4,起始端口为4000
// 则一般会使用4001 4002 4003 4004 4个端口作为内部通讯端口
$gateway->startPort = 2300;

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


两个文件中,基本上除了端口不一样,其他都一样的。。。

walkor

赞同来自:

$gateway->startPort = 2300;
不要配置成一样

MyLover - phper

赞同来自:

$gateway->startPort = 2300;
改成不同,可行,谢谢~

要回复问题请先登录注册