【技术实现步骤摘要】
一种HTTP与WebSocket协同的分布式状态同步方法
本专利技术涉及数据通讯
,特别是涉及一种HTTP与WebSocket协同的分布式状态同步方法。
技术介绍
在音视频、屏幕共享等实时通讯领域,为了用户之间的高效协同,需要一种实时状态同步系统,同时兼容浏览器与APP。WebSocket使用长连接,可以实现服务端到客户端的即时通讯,但是客户端请求服务端,由于使用异步消息无法实时感知操作结果,操作可能出错;而单独使用WebSocket协议,需要额外的鉴权机制。在WebSocket长连接方面,现有技术多使用客户端发送心跳且只能发送文本,需要客户端与服务端同时实现,有一定复杂度;当前分布式WebSocket服务器集群依然使用分布式场景下常见的外部存储或消息机制,架构较为复杂。专利CN201811429767-一种新型实时信息流交互方法,给出了一种通过配合WebSocket协议,建立客户端和服务器的长连接,利用多通道的多并发通信,使用心跳检测进行信息交互的技术方案;相似专利CN201811622417-一种基 ...
【技术保护点】
1.一种HTTP与WebSocket协同的分布式状态同步方法,其特征在于,具体步骤包括:/n步骤1:WebSocket服务器集群初始化,具体为:部署WebSocket服务器集群,配置WebSocket服务器集群初始URL,WebSocket服务器集群内每个WebSocket服务器节点启动时初始化生成并发散列表和心跳检测线程;所述WebSocket服务器集群初始URL包含适用于浏览器端的WSS协议、适用于APP端的WSS协议及WS协议;所述并发散列表采用Key-Value存储结构,包含会话散列表和心跳检测散列表;所述会话散列表用于记录客户端与WebSocket服务器节点间的连 ...
【技术特征摘要】
1.一种HTTP与WebSocket协同的分布式状态同步方法,其特征在于,具体步骤包括:
步骤1:WebSocket服务器集群初始化,具体为:部署WebSocket服务器集群,配置WebSocket服务器集群初始URL,WebSocket服务器集群内每个WebSocket服务器节点启动时初始化生成并发散列表和心跳检测线程;所述WebSocket服务器集群初始URL包含适用于浏览器端的WSS协议、适用于APP端的WSS协议及WS协议;所述并发散列表采用Key-Value存储结构,包含会话散列表和心跳检测散列表;所述会话散列表用于记录客户端与WebSocket服务器节点间的连接信息,所述连接信息包括WebSocket会话信息和连接标识符;所述WebSocket会话是指客户端和某一个WebSocket服务器节点间建立的连接通道,所述WebSocket会话包含经重构的WebSocket服务器集群URL、用户ID、消息发送及回调方法、错误回调方法;所述用户ID为自动生成的用户身份唯一标识;所述WebSocket会话生成时分配一个会话标识符;所述连接标识符由WebSocket服务器节点IP和会话标识符组成;所述心跳散列表用于记录WebSocket服务器节点和客户端之间的心跳检测信息;所述心跳散列表包含会话标识符及WebSocket服务器节点上一次发送心跳检测的时间;所述心跳检测线程每隔10秒启动对会话散列表的遍历;
步骤2:重构WebSocket服务器集群URL:客户端首次访问应用服务器时,获取客户端访问请求参数写入WebSocket服务器集群初始URL,形成附带客户鉴权的WebSocket服务器集群URL;所述客户端访问请求参数包含客户端访问IP及访问身份标识;所述客户端访问IP的格式为IPv4或IPv6;所述应用服务器用于处理HTTP请求;
步骤3:待客户端与WebSocket服务器节点之间的长连接建立后,为每个客户端分配一个WebSocket会话;在WebSocket服务器节点的会话散列表中,以连接标识符为Key值,以WebSocket会话为Value值,记录本次建立的长连接;从WebSocket会话中提取用户ID,建立用户ID与连接标识符之间的对应关系,并将所述对应关系通过业务服务器存入数据库服务器中,所述业务服务器用于实际业务逻辑处理;
步骤4:在长连接保持过程中检测长连接是否正常:每隔10秒,WebSocket服务器节点通过步骤2建立的WebSocket会话,向客户端发送心跳检测数据包,同时依次遍历会话散列表中的Value值,即WebSocket会话,遍历时获取每个WebSocket会话建立时自动生成的会话标识符;根据连接标识符,在心跳散列表中查找是否有匹配的数据记录,如若没有,将会话标识符作为Key值,当前时间作为Value值存入心态散列表中;如若有,获取会话标识符对应的WebSocket服务器节点上一次发送心跳检检测包的时间,取当前时间与该值的差,判断差值是否大于20秒,若差值大于20秒,在心跳散列表中删除会话标识符对应的数据记录,关闭WebSocket会话的同时,在会话散列表中删除WebSocket会话对应的数据记录;若差值小于20秒,继续遍历会话散列表中下一个Value值,直至遍历完会话散列表;
步骤5:根据业务的处理结果类型确定本次业务状态变更请求是用户主动操作还是用户被动操作;所述业务状态包括业务逻辑的状态,所述业务的处理结果类型包括业务处理结果需告知用户和业务处理结果无需告知用户;若业务处理结果需告知用户,则本次业务状态变更请求视为用户主动操作,基于HTTP协议,客户端将业务状态变更请求发送至应用服务器处理,执行步骤6;若业务处理结果无需告知用户,则本次业务状态变更请求视为用户被动操作,基于WebSocket协议,客户端将业务状态变更请求发送至WebSocket服务器节点处理,执行步骤7;
步骤6:待应用服务器接收到业务状态变更请求时,调用业务服务器处理请求,并将结果反馈至客户端;业务服务器在处理业务状态变更请求时,找出需同步变更业务状态的其他用户ID;根据所述用户ID在数据库服务器中寻找与用户ID对应的连接标识符,通过解析连接标识符获取WebSocket服务器节点IP,WebSocket服务器节点根据连接标识符确定WebSocket会话,业务状态变更通知经WebSocket会话发送至客户端,告知用户业务状态已变更;
步骤7:获取登录客户端的用户ID,找到包含所述用户ID的WebSocket会话,通过WebSocket会话,业务状态变更通知请求发送至WebSocket服务器节点;WebSocket服务器节点在会话散列表中获取所述WebSocket会话对应的连接标识符,并连同WebSocket服务器集群URL、当前时间及业务状态变更通知发送至业务服务器处理;
步骤8:关闭客户端与WebSocket服务器节点之间的长连接,具体为:待WebSocket...
【专利技术属性】
技术研发人员:柳栋淼,黄蓉,邬江明,
申请(专利权)人:焦点科技股份有限公司,
类型:发明
国别省市:江苏;32
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。