转:
1前台实现
1 connect:function() { 2 ????????var webSocketIP = window.CRM_CONFIG.WebSocketIP; 3 ????????var target ?= ‘ws://‘+webSocketIP+‘/websocket‘; 4 ????????if (‘WebSocket‘ in window) { 5 ????????????ws = new WebSocket(target); 6 ????????} else if (‘MozWebSocket‘ in window) { 7 ????????????ws = new MozWebSocket(target); 8 ????????} else { 9 ????????????return;10 ????????}11 ????????ws.onopen = function () {12 ????????????console.log(‘Info: WebSocket connection opened.‘);13 ????????????document.getElementById("wsMsg").style.display = "block";14 ????????};15 ????????var self = this;16 ????????ws.onmessage = function (event) {17 ????????????if(‘您有如下工单需要及时处理:‘!= event.data) {18 ?????????????????self.setState({wsMessage: event.data})19 ?????????????????document.getElementById("wsMsg").style.display = "block";20 ????????????}else{21 ?????????????????document.getElementById("wsMsg").style.display = "none";22 ????????????}23 ????????};24 25 ???<div id="wsMsg" className="msgDialog msgDiv">26 ????????????????????<div className="msgContent" ?><a onClick ={this.closeMsg}> X </a></div>27 ????????????????????{this.state.wsMessage}28 ????????????????</div>
2、pom.xml依赖
1 ????<!--spring-websocket--> 2 ????????<dependency> 3 ????????????<groupId>javax.servlet</groupId> 4 ????????????<artifactId>javax.servlet-api</artifactId> 5 ????????????<version>3.1.0</version> 6 ????????</dependency> 7 ????????<dependency> 8 ????????????<groupId>org.springframework</groupId> 9 ????????????<artifactId>spring-websocket</artifactId>10 ????????????<version>${spring.version}</version>11 ????????</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"; ???????} ???}
用websocket实现后台推送消息
原文地址:https://www.cnblogs.com/libin6505/p/10432349.html