我现在是用的是阿里云的云服务器,它给了我一个10.x.x.x的内网IP,我想使用的是一gateway多worker 分离部署(可能其它人也在阿里云使用workerman同一个局域网),那我如何才能使gateway把进来的业务需求分发到我的bussinessworker中去而不是别人的?都是同一个局域网,在gateway的那个机子上没有地方配置写的是我bussinessworker的ip。为什么它不会发到局域网别人的bussinessworker上去呢?
Gateway启动时会将Gateway的内部通讯端口写到 Config/Store.php配置的存储中, BusinessWorker服务器也有一个Config/Store.php配置,并且与Gateway的相同, BusinessWorker启动后会读取Config/Store.php配置的存储,得到Gateway的内部通讯地址 然后BusinessWorker主动连接到Gateway,Gateway与BusinessWorker之间的连接就建立起来了。
所以基于上面的原理,分布式部署时 1、要求Config/Store.php使用redis/memcache存储,并且Gateway BusinessWorker服务器都可以访问 2、Gateway BusinessWorker服务器的Config/Store.php配置要相同
同样,基于上面原理,有多个GatwayWorker项目同时运行时, 要求多个GatwayWorker项目的Config/Store.php配置要求不同,否则数据会串
Gateway启动时会将Gateway的内部通讯端口写到 Config/Store.php配置的存储中,
举个例:如果gateway服务器所在ip为10.0.1.1,worker所在服务器所在ip为10.0.1.2/3,
Gateway启动时会将Gateway的内部通讯端口写到 10.0.1.1上的Config/Store.php配置的存储里还是10.0.1.1/2/3的Config/Store.php中?
10.0.1.1上的Config/Store.php 10.0.1.1/2/3的Config/Store.php 两个配置的是同一个redis/memcache存储
BusinessWorker启动后会读取Config/Store.php配置的存储,得到Gateway的内部通讯地址
这个是不是这样,10.0.1.2上的bussinessworker启动后读取store.php里的memcached地址是10.0.1.4,然后遍历整个局域网,发现其上的store.php里的memcached为10.0.1.4就认为是同一个组的?
如果有多个gateway,bussinessworker是怎样操作的?
没有局域网遍历,直接连存储中保存的通讯地址
store.php 中只有下面两个配置:
public static $driver = self::DRIVER_MC;
// 如果是memcache存储,则在这里设置memcache的ip端口,注意确保你安装了memcache扩展 public static $gateway = array( '127.0.0.1:11211', );
你的版本有点老了
包含最新版workerman的Chat 聊天室的源码在哪下载?
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 = sys_get_temp_dir().'/workerman-chat/';
如果没有局域网遍历,那bussinessworker如何知道向哪台机子去取存储中保存的通讯地址呢?
向这个机子取 public static $gateway = array( '127.0.0.1:6379', );
//$driver为DRIVER_MC/DRIVER_REDIS时需要配置memcached/redis服务端ip和端口 public static $gateway = array( '127.0.0.1:6379', );
这个不是写的是memcached/redis服务端ip和端口吗(上面注释是这样写的)
businessworekr 从memcached/redis服务端ip和端口的存储里读取数据 取得 gateway的通讯地址 然后去连这个地址,就连到gateway了
自己跟踪打印下存储里面存储的值吧
好的,谢谢
Gateway启动时会将Gateway的内部通讯端口写到 Config/Store.php配置的存储中,
BusinessWorker服务器也有一个Config/Store.php配置,并且与Gateway的相同,
BusinessWorker启动后会读取Config/Store.php配置的存储,得到Gateway的内部通讯地址
然后BusinessWorker主动连接到Gateway,Gateway与BusinessWorker之间的连接就建立起来了。
所以基于上面的原理,分布式部署时
1、要求Config/Store.php使用redis/memcache存储,并且Gateway BusinessWorker服务器都可以访问
2、Gateway BusinessWorker服务器的Config/Store.php配置要相同
同样,基于上面原理,有多个GatwayWorker项目同时运行时,
要求多个GatwayWorker项目的Config/Store.php配置要求不同,否则数据会串
Gateway启动时会将Gateway的内部通讯端口写到 Config/Store.php配置的存储中,
举个例:如果gateway服务器所在ip为10.0.1.1,worker所在服务器所在ip为10.0.1.2/3,
Gateway启动时会将Gateway的内部通讯端口写到 10.0.1.1上的Config/Store.php配置的存储里还是10.0.1.1/2/3的Config/Store.php中?
10.0.1.1上的Config/Store.php
10.0.1.1/2/3的Config/Store.php
两个配置的是同一个redis/memcache存储
BusinessWorker启动后会读取Config/Store.php配置的存储,得到Gateway的内部通讯地址
这个是不是这样,10.0.1.2上的bussinessworker启动后读取store.php里的memcached地址是10.0.1.4,然后遍历整个局域网,发现其上的store.php里的memcached为10.0.1.4就认为是同一个组的?
如果有多个gateway,bussinessworker是怎样操作的?
没有局域网遍历,直接连存储中保存的通讯地址
store.php 中只有下面两个配置:
public static $driver = self::DRIVER_MC;
你的版本有点老了
包含最新版workerman的Chat 聊天室的源码在哪下载?
class Store
{
// 使用文件存储,注意使用文件存储无法支持workerman分布式部署
const DRIVER_FILE = 1;
// 使用memcache存储,支持workerman分布式部署
const DRIVER_MC = 2;
// 使用redis存储(推荐),支持workerman分布式部署
const DRIVER_REDIS = 3;
}
// 默认系统临时目录下
Store::$storePath = sys_get_temp_dir().'/workerman-chat/';
如果没有局域网遍历,那bussinessworker如何知道向哪台机子去取存储中保存的通讯地址呢?
向这个机子取
public static $gateway = array(
'127.0.0.1:6379',
);
//$driver为DRIVER_MC/DRIVER_REDIS时需要配置memcached/redis服务端ip和端口
public static $gateway = array(
'127.0.0.1:6379',
);
这个不是写的是memcached/redis服务端ip和端口吗(上面注释是这样写的)
businessworekr 从memcached/redis服务端ip和端口的存储里读取数据 取得 gateway的通讯地址
然后去连这个地址,就连到gateway了
自己跟踪打印下存储里面存储的值吧
好的,谢谢