一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

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

2021-11-22 18:19:00 来源:中国专利 TAG:

基于星状网络和内存路由表实现socket会话集群通信的方法
技术领域
1.本发明涉及一种基于星状网络和内存路由表实现socket会话集群通信的方法。


背景技术:

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

a,当客户端a要发送一条消息给客户端b时,客户端a是将消息发送给消息队列的topic

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

b,订阅了queue

b,这样server

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

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

x只订阅自己的队列queue

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


技术实现要素:

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

a,server

a在收到消息后就可以将消息发送给客户端b,至此跨主机的socketa/b 就实现了信息的相互交互。
19.本发明方法中需约定以下协议及数据格式:1、消息协议组成如图3所示,消息协议由消息长度、命令类型、消息序列号、目的主机、接收用户、消息内容组成,除“消息内容”字段外其余字段都为固定4字节长度16进制内容;命令类型如表1所示。
20.表1命令类型说明0x00000001登陆请求0x80000001登录应答0x00000002提交消息0x80000002提交应答0x00000003转发消息0x80000003转发应答0x00000004心跳消息0x80000004心跳应答0x00000005下发消息0x80000005下发应答0x00000006退出请求0x80000006退出应答0x00000007广播消息0x80000007广播应答其他保留2、内存路由表内存路由表基于caffeine cache;caffeine 是目前非常流行java 内存缓存框
架,单应用读写可达百万qps/秒,能很好地满足我们在查找路由时对查询性能的业务需求,业务数据以键值对储存于内存。内存路由表的命名规范如表2所示。
21.表2keyvalue说明sms:会话用户id主机编号id键值数据类型都是字符串以上是本发明的较佳实施例,凡依本发明技术方案所作的改变,所产生的功能作用未超出本发明技术方案的范围时,均属于本发明的保护范围。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献