概念
TCP 全双工通信协议 双向 数据传输
代码实现
- 引入依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId> </dependency>
- Configuration配置
@Configuration public class WebSocketConfig { @Bean public ServerEndpointExporter serverEndpointExporter() { return new ServerEndpointExporter(); } }
- 创建Server核心类
@ServerEndpoint(value = "/im/{userId}")@Component @ServerEndpoint(value = "/im/{userId}") public class WebSocketServer { // 创建一个 HashMap 集合,通过该集合来存储 session 信息 private static HashMap<String , Session> sessionHashMap = new HashMap<>() ; // 创建一个变量,用来记录 userId private String userId = null ; /** * 当前客户端和服务器建立连接了以后,在这里会执行该方法 * @param session * @param userId */ @OnOpen public void onOpen(Session session , @PathParam(value = "userId") String userId) { // 把 userId 赋值给成员的 userId this.userId = userId ; // 就是把我们的 session 信息存储起来,后期我们在进行消息推送的时候,其实就是通过 session 对象中的方法完成消息的推送 if(sessionHashMap.containsKey(userId)) { sessionHashMap.remove(userId) ; } // 进行保存 sessionHashMap.put(userId , session) ; } @OnClose public void onClose() { if(sessionHashMap.containsKey(userId)) { sessionHashMap.remove(userId) ; } } // 消息的推送 北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090 public void sendMessageToUser(String userId , String message) { try { Session session = sessionHashMap.get(userId); session.getBasicRemote().sendText(message); } catch (IOException e) { e.printStackTrace(); } } }
- 修改OrderHandlerConsumer类
保存订单数据后,调用WebsocketServer中的sendMessageToUser完成消息推送