基于星状网络和内存路由表实现Socket会话集群通信的方法技术

技术编号:30903929 阅读:23 留言:0更新日期:2021-11-22 23:48
本发明专利技术涉及一种基于星状网络和内存路由表实现Socket会话集群通信的方法。创新性的引入了星状网络部署方式,结合高速内存路由表,将其中一个节点部署成中心节点来转发消息,解决了用户Socket会话连接在不同服务器时,Socket间无法相互通信的难点,实现了不同服务器间用户Socket会话的相互通信。本发明专利技术方法通过利用星状网络这种应用部署方式结合高速内存路由表,在不引入第三方依赖组件的情况下,较为巧妙地解决了集群间Socket的相互通信问题。题。题。

【技术实现步骤摘要】
基于星状网络和内存路由表实现Socket会话集群通信的方法


[0001]本专利技术涉及一种基于星状网络和内存路由表实现Socket会话集群通信的方法。

技术介绍

[0002]现有的实现Socket集群间通信的方法及其问题;1、引入消息队列组件进行消息广播目前市面大部分公司的实现方案是基于引入消息队列组件通过广播实现集群间Socket通信,即所有的服务器节点都去订阅Topic

A,当客户端A要发送一条消息给客户端B时,客户端A是将消息发送给消息队列的Topic

A,然后集群内每个服务节点都将收到一份广播的数据,然后尝试发送,这其中因为Socket连接只在某一台服务节点,所以仅有一台服务节点能发送成功。这就存在消息风暴、服务器资源浪费等问题,当消息发送量达到一定程度时,服务节点的资源都消耗在解析和本节点无关的消息上。
[0003]2、订阅预置的消息队列为解决广播消息带来的消息风暴问题,有一部分通过了优化方案,利用队列方式规避了消息风暴问题,即服务节点在上线时只订阅发送给自己的消息队列,这样当客户端A、B要进行通信时,是将消息发给客户端B所在的服务器节点订阅的队列,这里我们称之为Server

B,订阅了queue

b,这样Server

B只会拉去本节点所需要的发送的消息数据。这种方案能相对较好的规避广播方式的消息风暴问题,但是目前主流的消息队列中间件对动态新建队列支持度不够完善,都是在服务节点上线前新建好队列queue

x,代码里硬编码,服务器节点server

x只订阅自己的队列queue

x,存在硬编码不方便及服务动态横向扩展不灵活问题。

技术实现思路

[0004]本专利技术的目的在于在不引入第三方依赖组件的情况下,较为巧妙地解决了集群间Socket的相互通信问题,提供一种基于星状网络和内存路由表实现Socket会话集群通信的方法,基于星状网络的部署方式,利用将其中一台节点当做中心节点转发来自不同服务节点的消息,实现集群内不同Socket的相互通信。
[0005]为实现上述目的,本专利技术的技术方案是:一种基于星状网络和内存路由表实现Socket会话集群通信的方法,引入星状网络部署方式,结合高速内存路由表,将其中一个节点部署成中心节点来转发消息,从而解决用户Socket会话连接在不同服务器时,不同服务器间用户Socket 会话的相互通信。
[0006]在本专利技术一实施例中,该方法具体实现步骤如下:Step1、修改中心节点服务器默认配置文件,注册为中心节点,其他服务器采用默认配置,启动后都为服务节点,服务节点启动时默认会向中心节点发起连接请求,保持连接,同时自动加入GatWay负载均衡成为服务节点之一,并拉取数据库中所有在线连接与主机关联关系保存到本地内存路由缓存表信息;
Step2、新客户端连接上服务节点时,将自己和服务节点的对应关系保存到数据库中,并将关联关系通过中心节点向各个服务节点广播,各个服务节点会保存到本地内存路由表缓存信息中;Step3、不同服务器间用户Socket 会话的相互通信。
[0007]在本专利技术一实施例中,不同服务器间用户Socket 会话的相互通信的实现方式为:发送消息时先尝试根据用户ID获取绑定的sessionChnnel 是否在本地,如果不在的话去内存路由表根据用户ID查找接收消息用户会话所在的主机的服务节点,然后将包含目的主机和接收消息用户信息组成的消息包发送给中心节点处理,中心节点根据目的主机将消息转发给目的主机的服务节点,目的主机的服务节点收到消息后根据用户ID获取sessionChnnel发送信息,完成消息发送。
[0008]相较于现有技术,本专利技术具有以下有益效果:1、部署方式简单,改造成本小本专利技术中,创新性地将应用部署采用星状网络部署方式,部署简单便捷,相对于已有系统仅仅只需将一台节点的配置文件定义为中心节点,其他服务节点采用默认配置,无需改变。简单便捷,代码改造成本小2、降低系统复杂度,提升系统可靠性本专利技术中,不再引入类似消息队列等第三方组件,降低的系统的复杂度,加强了系统的可控性,有效地提升了系统的稳定性。
[0009]3、承载容量高,横向扩展能力强本专利技术中,服务节点上线后通过自动保持与中心节点的连接实现自动注册上线,极大的加强了集群的自动横向扩展能力,有效的提高了业务连接的承载容量。
附图说明
[0010]图1为本专利技术方法星状网络部署示意图。
[0011]图2 为消息发送业务时序图。
[0012]图3为消息协议消息包组成。
具体实施方式
[0013]下面结合附图,对本专利技术的技术方案进行具体说明。
[0014]如图1所示,本专利技术一种基于星状网络和内存路由表实现Socket会话集群通信的方法,基于星状网络的部署方式,利用将其中一台节点当做中心节点转发来自不同服务节点的消息,实现集群内不同Socket的相互通信,即发送消息时先尝试根据用户ID获取绑定的sessionChnnel 是否在本地,如果不在的话去内存路由表根据用户ID查找,该接收消息用户会话所在的主机节点,然后将包含目的主机和接收用户信息组成的消息包发送个中心节点处理,中心节点根据目的主机将消息转发给目的主机服务节点,目的主机服务节点收到消息后根据用户ID获取sessionChnnel发送信息,完成消息发送。
[0015]以下为本专利技术具体实现过程。
[0016]Step1、修改中心节点服务器默认配置文件,注册为中心节点,其他服务应用采用默认配置,启动后都为服务节点,服务节点启动时默认会向中心节点发起连接请求,保持连
接,同时自动加入GatWay负载均衡成为服务节点之一,并拉取数据库中所有在线连接与主机关联关系保存到本地内存路由缓存表信息。
[0017]Step2、新客户端连接上服务节点时,都会将自己连接和服务节点的对应关系保存到数据库中,并将关联关系通过中心节点向各个服务节点广播,各个服务节点会保存到本地内存路由表缓存信息中。
[0018]Step3、Socket间发送消息。结合如下图2消息发送时序图说明客户端A发送的消息被所在服务端Server

S接收解析,服务端S从消息内容中读取接收消息用户的ID,在本节点尝试通过根据用户ID获得客户端B对应绑定的SessionChnnel 发送消息,如果能获取到则说明客户端A、B连接在同一个服务节点可以直接相互发送消息;如果根据用户ID在Server

S无法获得客户端B对应的SessionChnnel,则根据Key=SMS:USER_ID ;从路由缓存表查找对应所在主机,填入目的主机字段,重新打包消息,将消息发送给中心节点,此时中心节点通过消息内容的主机字段获取对应绑定主机与中心节点的会话SessionChnnel,将消息转发给对应客户端B对应所在服务节点Server<本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于星状网络和内存路由表实现Socket会话集群通信的方法,其特征在于,引入星状网络部署方式,结合高速内存路由表,将其中一个节点部署成中心节点来转发消息,从而解决用户Socket会话连接在不同服务器时,不同服务器间用户Socket 会话的相互通信。2.根据权利要求1所述的基于星状网络和内存路由表实现Socket会话集群通信的方法,其特征在于,该方法具体实现步骤如下:Step1、修改中心节点服务器默认配置文件,注册为中心节点,其他服务器采用默认配置,启动后都为服务节点,服务节点启动时默认会向中心节点发起连接请求,保持连接,同时自动加入GatWay负载均衡成为服务节点之一,并拉取数据库中所有在线连接与主机关联关系保存到本地内存路由缓存表信息;Step2、新客户端连接上服务节点时,将自己和服务节点的对...

【专利技术属性】
技术研发人员:卢镇荣
申请(专利权)人:中邮科通信技术股份有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1