用websocket实现后台推送消息
2016-06-17 18:12
417 查看
1前台实现
2、pom.xml依赖
3、spring.xml配置
4、java代码
================
或者前台拉定时取消息
connect:function() { var webSocketIP = window.CRM_CONFIG.WebSocketIP; var target = 'ws://'+webSocketIP+'/websocket'; if ('WebSocket' in window) { ws = new WebSocket(target); } else if ('MozWebSocket' in window) { ws = new MozWebSocket(target); } else { return; } ws.onopen = function () { console.log('Info: WebSocket connection opened.'); document.getElementById("wsMsg").style.display = "block"; }; var self = this; ws.onmessage = function (event) { if('您有如下工单需要及时处理:'!= event.data) { self.setState({wsMessage: event.data}) document.getElementById("wsMsg").style.display = "block"; }else{ document.getElementById("wsMsg").style.display = "none"; } }; <div id="wsMsg" className="msgDialog msgDiv"> <div className="msgContent" ><a onClick ={this.closeMsg}> X </a></div> {this.state.wsMessage} </div>
2、pom.xml依赖
<!--spring-websocket--> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-websocket</artifactId> <version>${spring.version}</version> </dependency>
3、spring.xml配置
<!--websocket 配置--> <bean id="websocket" class="com.oasis.crm.controller.websocket.WebsocketEndPoint"/> <websocket:handlers allowed-origins="*"> <websocket:mapping path="/websocket" handler="websocket"/> <websocket:handshake-interceptors> <bean class="com.oasis.crm.controller.websocket.HandshakeInterceptor"/> </websocket:handshake-interceptors> </websocket:handlers>
4、java代码
package com.oasis.crm.controller.websocket; import com.oasis.crm.dao.biz.user.UserDao; import com.oasis.crm.model.biz.user.User; import com.oasis.crm.service.biz.order.AcceptedWorkOrderService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.socket.CloseStatus; import org.springframework.web.socket.TextMessage; import org.springframework.web.socket.WebSocketSession; import org.springframework.web.socket.handler.TextWebSocketHandler; import java.util.Timer; import java.util.TimerTask; /** * 推送即将要处理完成的受理单给处理人 */ @RequestMapping("/websocket") public class WebsocketEndPoint extends TextWebSocketHandler { @Autowired private AcceptedWorkOrderService acceptedWorkOrderService; @Autowired private UserDao userDao; private Timer timer; @Override protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception { if(!session.isOpen()){ timer.cancel(); return; } super.handleTextMessage(session, message); session.sendMessage(message); } @Override public void afterConnectionEstablished(WebSocketSession session) throws Exception { String loginUserName = session.getPrincipal().getName(); User user = userDao.findUserByLoginName(loginUserName); timer = new Timer(true); long delay = 0; OrderTimeTask orderTimeTask = new OrderTimeTask(user,session); timer.schedule(orderTimeTask,delay, 60000);// 设定指定的时间time,此处为1分钟 } class OrderTimeTask extends TimerTask{ private User user; private WebSocketSession session; public OrderTimeTask(User user,WebSocketSession session){ this.user = user; this.session = session; } @Override public void run() { try { String reminder = acceptedWorkOrderService.getLastReminderOrder(user.getId()); TextMessage textMessage = new TextMessage(reminder); handleMessage(session,textMessage); } catch (Exception e){ e.printStackTrace(); } } } @Override public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception { System.out.println("Connection Closed!"); } }
package com.oasis.crm.controller.websocket; import org.springframework.http.server.ServerHttpRequest; import org.springframework.http.server.ServerHttpResponse; import org.springframework.web.socket.WebSocketHandler; import org.springframework.web.socket.server.support.HttpSessionHandshakeInterceptor; import java.util.Map; public class HandshakeInterceptor extends HttpSessionHandshakeInterceptor { @Override public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Map<String, Object> attributes) throws Exception { return super.beforeHandshake(request, response, wsHandler, attributes); } @Override public void afterHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Exception ex) { super.afterHandshake(request, response, wsHandler, ex); } }
================
或者前台拉定时取消息
setInterval(()=> { this.getReminders(); }, 300000); getReminders(){ $.getJSON(Remote.acceptedWorkOrder.reminderOrders,packVo=>{ this.setState({ wsMessage:packVo.vo }); }); if('您有如下工单需要及时处理:'!= this.state.wsMessage&&''!=this.state.wsMessage){ document.getElementById("wsMsg").style.display = "block"; }else{ document.getElementById("wsMsg").style.display = "none"; } }
相关文章推荐
- 学习如何看懂SQL Server执行计划(一)——数据查询篇
- Android AsyncTask 源码解析
- c++——第一次作业2
- 第16周-阅读程序2(2)
- nginx 代理https后,spring mvc web应用redirect https变成http
- Clever Y [Bzoj 1467]
- 飛飛(七十四)阅读 STL中的简单容器和迭代器
- memset效率问题
- TCP/IP 封装-分用
- 基于bootstrap风格的项目
- Android studio 和 Eclipse在Win上常见快捷键对比
- Xdebug文档(六) 分析PHP脚本
- android 设置跳转
- 纯代码实现 AutoLayout
- find命令的使用
- Socket与SocketServer结合多线程实现多客户端与服务器通信
- python IDLE 背景以及字体的修改
- 【solr】关于solr schema.xml 和solrconfig.xml的解释
- 把玩之python爬虫正则表达式
- Lock wait timeout exceeded; try restarting transaction