基于websocket 页面消息推送系统(后台处理流程解析)
2018-03-22 20:58
676 查看
这两天老大叫做个推送系统,捋了挺久的早上才捋清楚 。
推送技术方面我用的websocket 我这边先讲一下websocket 配置 和基本解析
在boot 项目的基本依赖上添加这个依赖 <!-- 添加websocket依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>然后创建一个处理类名字可以随便命名
推送技术方面我用的websocket 我这边先讲一下websocket 配置 和基本解析
在boot 项目的基本依赖上添加这个依赖 <!-- 添加websocket依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>然后创建一个处理类名字可以随便命名
package com.jn.srr.message.endpoint; import javax.websocket.*; import javax.websocket.server.PathParam; import javax.websocket.server.ServerEndpoint; import java.io.IOException; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; /** * 消息推送类 * @addPerson : hzb 2018-3-22 */ /* *注解解释: * ServerEndpoint 类似requestMapping 的功能 * OnOpen 建立连接触发 * OnMessage 建立连接再次交互触发 * OnClose 断开连接触发 */ @ServerEndpoint("/webSocket/{userid}") public class WebSocketServerEndpoint { private static Map<String, Session> ssrSessions = new ConcurrentHashMap<String, Session>(); @OnOpen public void openSession(@PathParam("userid") String userid, Session session){ //将回话保存并且保证线程安全 (这个地方考虑用redis 做保存) ssrSessions.put(userid,session); //通知通知当前会话 告知连接成功 sendText(session,"用户: "+userid+" 连接成功"); } /** * 这个方法是用于你已经建立了连接 前端二次以后的交互 调用的方法 这个根据大家的实际业务调用是业务 * @param userid * @param session * @param message */ @OnMessage public void onMessage(@PathParam("userid") String userid, Session session, String message) { //发送小消息调用 } /** * 这个是用于断开连接后执行 的方法 也是根据实际业务进行调用 * @param userid * @param session */ @OnClose public void onClose(@PathParam("userid") String userid, Session session) { String sessionId = session.getId(); //清除session //这边可以做当前那几位在线 统计 } /** * 发送消息 (往前端推送消息的方法) * @param session * @param message * @addPerson : hzb 2018-3-22 */ private void sendText(Session session, String message) { /** * sessoion 这边向前端推送有两个方法 * getAsyncRemote 异步方式 * getBasicRemote 同步方式 * 我这边采用的是同步方式反应速度比较快 但是后期可能出现 等待线程情况 * getBasicRemote 我如果向多个连接推送的话 需要排队发送一个一个来的情况 * 我测试的过程出现过 IllegalStateException 错误 这个后期量上来了在做决定是否修改 */ RemoteEndpoint.Basic basic = session.getBasicRemote(); try { //sendText 发送消息 basic.sendText(message); } catch (IOException e) { e.printStackTrace(); } } }
代码里面我注释都写的很清楚不清楚可以邮我接下来我画一下我自己做的推送流的流程(我这边只将我主动推送的流程 被动的不说下次有时间我在贴出来)
相关文章推荐
- [实践]基于WebSocket,Spring开发消息系统后台
- IOS基于APNS消息推送原理与实现(JAVA后台)
- IOS推送消息处理跳转指定页面
- IOS 基于APNS消息推送原理与实现(JAVA后台)
- c#网络通信框架networkcomms内核解析之二 消息处理流程
- IOS 基于APNS消息推送原理与实现(JAVA后台)
- Ruby 基于websocket的前台及后台实时推送
- APNS推送消息到达后的处理流程
- websocket后台自动推送消息
- IOS、Andriod、WP8 三大系统后台运行及消息推送机制
- 转:IOS 基于APNS消息推送原理与实现(JAVA后台)
- 基于iOS平台的消息处理方法及系统
- IOS、Andriod、WP8 三大系统后台运行及消息推送机制
- IOS 基于APNS消息推送原理与实现(JAVA后台)
- IOS 基于APNS消息推送原理与实现(JAVA后台)
- spring boot 源码解析14-默认错误页面处理流程, 自定义,及EnableAutoConfigurationImportSelector处理
- IOS 基于APNS消息推送原理与实现(JAVA后台)
- IOS 基于APNS消息推送原理与实现(JAVA后台)
- PHP基于websocket的前台及后台实时推送
- JAVA 基于websocket的前台及后台实时推送