基于春天框架来写的,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实时推送实例