基于春天实现websocket实时推送实例

  

基于春天框架来写的,websocket实时推送例子,具体内容如下
  

  

第一步:自己搭建一个springmvc项目,很简单,网上百度都有;pom文件添加以下:

        & lt; !——WebSocket祝辞   & lt; dependency>   & lt; groupId> org.springframework   & lt; artifactId> spring-websocket   & lt; version> 4.2.4.RELEASE   & lt;/dependency>         & lt; dependency>   & lt; groupId> org.springframework   & lt; artifactId> spring-messaging   & lt; version> 4.2.4.RELEASE   & lt;/dependency>   之前      

我的春季版本是4.2.4的,所以websocket也是4.2.4的;websocket最好和春季版本保持一致
  

  

第二步:编写消息处理器

     /* *   *项目名称:springRabbitMQ   *文件名称:MyMessageHandler.java   *包名称:com.zsy.websocket   *日期:2018年1月31日上午11:10:03   * 2018年版权(c), zhaoshouyun保留所有权利。   *   */包com.zsy.websocket;      进口java.io.IOException;   进口java.util.Map;   进口java.util.Set;   进口java.util.concurrent.ConcurrentHashMap;      进口org.apache.commons.lang3.StringUtils;   进口org.springframework.web.socket.CloseStatus;   进口org.springframework.web.socket.TextMessage;   进口org.springframework.web.socket.WebSocketHandler;   进口org.springframework.web.socket.WebSocketMessage;   进口org.springframework.web.socket.WebSocketSession;/* *   *名称:MyMessageHandler   *功能:实现webscoket接口   *日期:2018年1月31日上午11:10:03   * @author zhaoshouyun   * @version   * @since JDK 1.7   */公共类MyMessageHandler实现WebSocketHandler {//用户的关键   公共静态最终字符串USER_KEY=癱urrent_user”;/* *   * userMap:存储用户连接webscoket信息   * @since JDK 1.7   */私人最终静态Map<字符串,WebSocketSession>userMap;   静态{   userMap=new ConcurrentHashMap<字符串,WebSocketSession> (30);   }/* *   *关闭websocket时调用该方法   * @see org.springframework.web.socket.WebSocketHandler # afterConnectionClosed (org.springframework.web.socket。WebSocketSession org.springframework.web.socket.CloseStatus)   */@Override   公共空间afterConnectionClosed (WebSocketSession会话,CloseStatus状态){抛出异常   字符串标识=this.getUserId(会话);   如果(StringUtils.isNoneBlank (userId)) {   userMap.remove (userId);   System.err。println(“该”+用户名+”用户已成功关闭”);   其他}{   System.err.println(“关闭时,获取用户id为空");   }      }/* *   *建立websocket连接时调用该方法   * @see org.springframework.web.socket.WebSocketHandler # afterConnectionEstablished (org.springframework.web.socket.WebSocketSession)   */@Override   公共空间afterConnectionEstablished (WebSocketSession会话){抛出异常   字符串标识=this.getUserId(会话);   如果(StringUtils.isNoneBlank (userId)) {   userMap。把(userId,会话);   会话。sendMessage(新TextMessage(“建立WebSocket连接成功! "));   }      }/* *   *客户端调用websocket.send时候,会调用该方法,进行数据通信   * @see org.springframework.web.socket.WebSocketHandler # handleMessage (org.springframework.web.socket。WebSocketSession org.springframework.web.socket.WebSocketMessage)   */@Override   公共空间handleMessage (WebSocketSession会话,WebSocketMessage<& # 63;比;消息){抛出异常   字符串味精=message.toString ();   字符串标识=this.getUserId(会话);   System.err.println(“该”+用户名+”用户发送的消息是:”+味精);   消息=new TextMessage(“服务端已经接收到消息,味精=" +味精);   session.sendMessage(消息);      }/* *   *传输过程出现异常时,调用该方法   * @see org.springframework.web.socket.WebSocketHandler # handleTransportError (org.springframework.web.socket。WebSocketSession java.lang.Throwable)   */@Override   公共空间handleTransportError (WebSocketSession会话,Throwable e){抛出异常   WebSocketMessage消息=new TextMessage(“异常信息:“+ e.getMessage ());   session.sendMessage(消息);   }/* *   *   * @see org.springframework.web.socket.WebSocketHandler # supportsPartialMessages ()   */@Override   公共布尔supportsPartialMessages () {      返回错误;   }/* *   * sendMessageToUser:发给指定用户   * @author zhaoshouyun   * @param标识   * @param内容   * @since JDK 1.7   */公共空间sendMessageToUser (String userId, String内容){   WebSocketSession会话=userMap.get (userId);   如果(会话!=零,,session.isOpen ()) {   尝试{   TextMessage消息=new TextMessage(内容);   session.sendMessage(消息);   }捕捉(IOException e) {   e.printStackTrace ();   }   }   }/* *   * sendMessageToAllUsers:发给所有的用户   * @author zhaoshouyun   * @param内容   * @since JDK 1.7   */公共空间sendMessageToAllUsers(字符串内容){   Set

基于春天实现websocket实时推送实例