关于GatewayWorker框架中,多个gateway,businessworker中,不同gateway客户端如何通信疑惑?

背景(gatewayWorker框架):
有两台gateway服务器,分别为gateway_1, gateway_2
两台businesswork服务器,分别为businesswork_1, businesswork_2
假设有4个客户端,c1, c2, c3, c4,其中 c1和c2连接到gateway_1上, c3和c4连接到gateway_2上
并且c1, c2, c3, c4为同一个分组,如下所示


TIM截图20190610183252.png


 
 
问题1:
c1给c4发送消息,在gatewayWorker内部是如何实现的?看了手册,自己理解为如下流程:
c1----->gateway_1转发消息---------->businessWorker_1处理完业务-------------->gateway_2转发消息------------>c4
相当于在businessWorker_1处理完后,通过businessWorker_1和gateway_2已经建立好的TCP连接来转发数据,内部有什么机制吗?
 
问题2:
c1, c2, c3, c4是一组,如果给这个组广播消息,内部是如何实现的呢?
 
看了gatewayWorker框架源代码,还是不太明白,求教各位
已邀请:

blogdaren - 乐于分享的PHP码农【http://www.blogdaren.com】

赞同来自:

1、首先 c1----->gateway_1转发消息 ---------> 【这里不一定是businessWorker_1处理处理业务,因为这里内置默认是随机的worker路由选择策略】
2、假设是businessWorker_1处理消息 -------> gateway_2转发消息------------>c4 , 根据图示实际例子, 这里的原理就是:
(1)无论是站在gateway侧,还是businessworker侧来看,总共维持了  2 * 2 = 4 个tcp 连接;
(2)关键就在于 businessWorker_1 会通过gateway_2 这条通道将消息转发给c4,因为c4对应的client_id 是由 gateway_local_ip + gateway_local_port + connection_id 唯一确定的;
3、至于组内广播原理大致是:
(1)首先理解了上面那个原理,组播或广播就不难理解了;
(2)每个gateway进程都会维护一个相应的数组结构,该数组保存了加入到当前组的所有客户端对象;
(3)当组播或广播时,每个gateway进程内逆向遍历出对应的客户端对象,进而实现数据的转发;

要回复问题请先登录注册