基于go的websocket消息推送的集群实现

author author     2023-05-03     422

关键词:

参考技术A 目前websocket技术已经很成熟,选型Go语言,当然是为了节省成本以及它强大的高并发性能。我使用的是第三方开源的websocket库即gorilla/websocket。
由于我们线上推送的量不小,推送后端需要部署多节点保持高可用,所以需要自己做集群,具体架构方案如图:

Auth Service:鉴权服务,根据Token验证用户权限。
Collect Service:消息采集服务,负责收集业务系统消息,存入MongoDB后,发送给消息分发服务。
Dispatch Service:消息分发服务,根据路由规则分发至对应消息推送服务节点上。
Push Service:消息推送服务,通过websocket将消息推送给用户。

集群推送的关键点在于,web端与服务端建立长连接之后,具体跟哪个推送节点保持长连接的,如果我们能够找到对应的连接节点,那么我们就可以将消息推送出去。下面讲解一下集群的大致流程:
1>. web端用户登录之后,带上token与后端推送服务(Push Service)保持长连接。
2>. 推送服务收到连接请求之后,携带token去鉴权服务(Auth Service)验证此token权限,并返回用户ID。
3>. 把返回的用户ID与长连接存入本地缓存,保持用户ID与长连接绑定关系。
4>. 再将用户ID与本推送节点IP存入redis,建立用户(即长连接)与节点绑定关系,并设置失效时间。
5>. 采集服务(Collect Service)收集业务消息,首先存入mongodb,然后将消息透传给分发服务(Dispatch Service)。
6>. 分发服务收到消息之后,根据消息体中的用户ID,从redis中获取对应的推送服务节点IP,然后转发给对应的推送节点。
7>. 推送服务节点收到消息之后,根据用户ID,从本地缓存中取出对应的长连接,将消息推送给客户端。

其他注意事项:

使用websocket实现消息推送

WebSocket上联系客服功能在项目中很难避免,一般有下面三种实现方式: 使用http的get方式轮询接入第三方IM系统自己的IM系统 基于socket基于websocket第一种方式,最low的,实现简单,但是浪费用户流量;第二种方式,接入简... 查看详情

springboot使用websocket实现服务端推送--集群实现

...Tomcat的方式,怎么实现给某个人推送消息?比如WebSocket1连接到Tomcat1,但是在Tomcat2需要给WebSocket1发送消息,怎么办?一般的想法是像httpsession的集群处理方式一样,利用一个中间件Redis来保存session即可。但... 查看详情

springboot基于websocket进行推送

参考技术A客户端发起http请求,请求Netty服务器进行WebSocket连接,服务器接收后请求后进行注册信道并登记客户端IP地址,如此一来就建立了WebSocket通讯连接。上面的论述可以得出,我们可以比较Http和WebSocket两者之间的关系和区... 查看详情

使用websocket实现消息推送(上)(代码片段)

...get方式轮询接入第三方IM系统自己的IM系统基于socket基于websocket第一种方式,最low的,实现简单,但是浪费用户流量;第二种方式,接入简单,功能强大,但是可能需要一定的成本( 查看详情

springboot项目==基于websocket的服务端推送消息。

1.创建springboot项目,首先我们还是先引入依赖<!--webSocketbegin--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId></d 查看详情

springboot集成websocket,轻松实现信息推送!

...前端,于是就使用到了MQTT,特此记录一下。一、什么是websocket?WebSocket协议是基于TCP的一种新的网络协议。它实现了客户端与服务器全双工通信,学过计算机网络都知道,既然是全双工,就说明了服务器可以主动发送信息给客... 查看详情

websocket基于tomcat实现

参考技术AWebSocket是一种支持双向通讯网络通信协议。意思就是服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息属于服务器推送技术的一种。模拟一个用户分别通过H5,PC端,小程序登录系统,后登录的应... 查看详情

基于sse实现服务端消息主动推送解决方案(代码片段)

...IE不支持该技术,只能通过轮训的方式实现。相比于WebSocket,SSE简单很多,服务器端和客户端工作量都要小很多、简单很多,同时实现的功能也要有局限。相比于WebSocket两者的区别:WebSocket是全双工通道,... 查看详情

java基于websocket的前台及后台实时推送

JAVAwebsocket实时消息推送 实现步骤如下:1.        获取GoEasy appkey.在goeasy官网上注册一个账号,并新建一个app. APP创建好后系统会为该app自动生成两个key, 一个既可以用来接收又可以用来... 查看详情

java后端+前端使用websocket实现消息推送(代码片段)

java后端+前端使用WebSocket实现消息推送(流程+详细代码)创建WebSocket的简单实例操作流程1.引入Websocket依赖2.创建配置类WebSocketConfig3.创建WebSocketServer4.websocket调用前端WebSocket连接OK,下课!!!在项目的开... 查看详情

springboot+websocket实时消息推送

...的后台管理系统实现新订单提醒推送功能,利用SpringBoot+WebSocket实时消息推送的方式进行实现。引入依赖,我使用的是SpringBoot版本2.2.6.RELEASE,自动管理依赖版本配置类WebSocketConfig,扫描并注册带有@ServerEndpoint注解的所有websocket... 查看详情

使用websocket实现消息推送(下)(代码片段)

0x00WebSocket上一篇使用Java-WebSocket写了一套WebSocket的Demo,这一篇着重分析下WebSocket的一些实现细节,更加详细的协议细节可参考RFC6455。0x01WebSocket协议WebSocket协议:可参考RFC6455抓包工具:Charles和WireShark测试代码:参... 查看详情

java实现后台服务器消息推送

1.什么是WebSocketWebSocket协议是基于TCP的一种新的网络协议。它实现了浏览器与服务器全双工(full-duplex)通信——允许服务器主动发送信息给客户端。2.实现原理在实现websocket连线过程中,需要通过浏览器发出websocket连线请求,然后... 查看详情

基于sse实现服务端消息主动推送解决方案(代码片段)

...IE不支持该技术,只能通过轮训的方式实现。相比于WebSocket,SSE简单很多,服务器端和客户端工作量都要小很多、简单很多, 查看详情

websocket+rabbitmq实现消息推送系统(代码片段)

...可以引入消息队列RabbitMQ进行流量削峰。向指定用户发送WebSocket消息并处理对方不在线的情况:如果 查看详情

基于go-gin框架的web服务框架之websocket(二)

...处理都需要重新发起请求,进行三个握手,四次挥手,而websocket只需要进行一次tcp连接,就可以维持长连接不断的进行发送和回复消息的请求,并且支持服务端向客户端的实时消息推送,这一点是http无法做到的。客户端发送一... 查看详情

springboot+netty+websocket实现消息推送(代码片段)

关于NettyNetty是一个利用Java的高级网络的能力,隐藏其背后的复杂性而提供一个易于使用的API的客户端/服务器框架。Maven依赖<dependencies> <!-- https://mvnrepository.com/artifact/io.netty/netty-all --> <dependency>  <groupId&g 查看详情

使用websocket实现消息推送(心跳)(代码片段)

...跳的事情,这里再做一个补充。先说我的结论:WebSocket协议已经设计了心跳,这个功能可以到达检测链接是否可用心跳是用来检测链接是否可用的,不一定支持携带数据,可要看具体实现如果非要心跳中带上... 查看详情