如題,同一臺機(jī)器中有:項(xiàng)目一 -> 使用gateway,一個start1.bat;項(xiàng)目二 -> 使用gateway,第二個start2.bat。
運(yùn)行 start1.bat 測試項(xiàng)目一的時候正常,同時運(yùn)行 start2.bat 測試項(xiàng)目二時,就會報錯
“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下如果需要同時運(yùn)行多個gateway程序的話,需要做哪些修改呢?
Applications/項(xiàng)目一/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服務(wù)端ip和端口
public static $gateway = array(
'127.0.0.1:6378',
);
// $driver為DRIVER_FILE時要配置此項(xiàng),實(shí)際配置在最下面一行
public static $storePath = '';
}
// 實(shí)際在這里配置的Store::$storePath ,默認(rèn)為臨時目錄
Store::$storePath = sys_get_temp_dir().'/TmpZP/';
Applications/項(xiàng)目二/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服務(wù)端ip和端口
public static $gateway = array(
'127.0.0.1:6379',
);
// $driver為DRIVER_FILE時要配置此項(xiàng),實(shí)際配置在最下面一行
public static $storePath = '';
}
// 實(shí)際在這里配置的Store::$storePath ,默認(rèn)為臨時目錄
Store::$storePath = sys_get_temp_dir().'/TmpSSL/';
這樣的配置有問題么?也還是會報錯的。。。而且兩個里面,項(xiàng)目一的客戶端連接時會在項(xiàng)目二的start.bat里面顯示已連接,應(yīng)該是要在項(xiàng)目一的start.bat里面顯示已連接的
兩個項(xiàng)目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 進(jìn)程,這里使用Text協(xié)議,可以用telnet測試
$gateway = new Gateway("Text://0.0.0.0:8092");
// gateway名稱,status方便查看
$gateway->name = 'ZpGateway';
// gateway進(jìn)程數(shù)
$gateway->count = 4;
// 本機(jī)ip,分布式部署時使用內(nèi)網(wǎng)ip
$gateway->lanIp = '192.168.2.122';
// 內(nèi)部通訊起始端口,假如$gateway->count=4,起始端口為4000
// 則一般會使用4001 4002 4003 4004 4個端口作為內(nèi)部通訊端口
$gateway->startPort = 2300;
// 如果不是在根目錄啟動,則運(yùn)行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 進(jìn)程,這里使用Text協(xié)議,可以用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進(jìn)程數(shù)
$gateway->count = 4;
// 本機(jī)ip,分布式部署時使用內(nèi)網(wǎng)ip
// $gateway->lanIp = '127.0.0.1';
$gateway->lanIp = '192.168.2.122';
// 內(nèi)部通訊起始端口,假如$gateway->count=4,起始端口為4000
// 則一般會使用4001 4002 4003 4004 4個端口作為內(nèi)部通訊端口
$gateway->startPort = 2300;
// 如果不是在根目錄啟動,則運(yùn)行runAll方法
if(!defined('GLOBAL_START'))
{
Worker::runAll();
}
兩個文件中,基本上除了端口不一樣,其他都一樣的。。。