阿里云服务器免费领卷啦。

捡代码论坛-最全的游戏源码下载技术网站!

 找回密码
 立 即 注 册

QQ登录

只需一步,快速开始

搜索
关于源码区的附件失效或欺骗帖, 处理办法
查看: 1762|回复: 0

用websocket实现后台推送消息

[复制链接]

4208

主题

210

回帖

12万

积分

管理员

管理员

Rank: 9Rank: 9Rank: 9

积分
126153
QQ
发表于 2017-4-5 11:17:14 | 显示全部楼层 |阅读模式

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.    <div id="wsMsg" className="msgDialog msgDiv">
  25.                     <div className="msgContent"  ><a onClick ={this.closeMsg}> X </a></div>
  26.                     {this.state.wsMessage}
  27.                 </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配置
  1. <!--websocket 配置-->
  2.     <bean id="websocket" class="com.oasis.crm.controller.websocket.WebsocketEndPoint"/>
  3.     <websocket:handlers  allowed-origins="*">
  4.         <websocket:mapping path="/websocket" handler="websocket"/>
  5.         <websocket:handshake-interceptors>
  6.             <bean class="com.oasis.crm.controller.websocket.HandshakeInterceptor"/>
  7.         </websocket:handshake-interceptors>
  8.     </websocket:handlers>
复制代码
4、java代码

  1. package com.oasis.crm.controller.websocket;
  2. import com.oasis.crm.dao.biz.user.UserDao;
  3. import com.oasis.crm.model.biz.user.User;
  4. import com.oasis.crm.service.biz.order.AcceptedWorkOrderService;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.web.bind.annotation.RequestMapping;
  7. import org.springframework.web.socket.CloseStatus;
  8. import org.springframework.web.socket.TextMessage;
  9. import org.springframework.web.socket.WebSocketSession;
  10. import org.springframework.web.socket.handler.TextWebSocketHandler;
  11. import java.util.Timer;
  12. import java.util.TimerTask;


  13. /**
  14. * 推送即将要处理完成的受理单给处理人
  15. */
  16. @RequestMapping("/websocket")
  17. public class WebsocketEndPoint extends TextWebSocketHandler {

  18.     @Autowired
  19.     private AcceptedWorkOrderService acceptedWorkOrderService;

  20.     @Autowired
  21.     private UserDao userDao;

  22.     private Timer timer;

  23.     @Override
  24.     protected void handleTextMessage(WebSocketSession session,
  25.                                      TextMessage message) throws Exception {
  26.         if(!session.isOpen()){
  27.             timer.cancel();
  28.             return;
  29.         }
  30.         super.handleTextMessage(session, message);
  31.         session.sendMessage(message);
  32.     }
  33.     @Override
  34.     public void afterConnectionEstablished(WebSocketSession session) throws Exception {
  35.         String loginUserName = session.getPrincipal().getName();
  36.         User user = userDao.findUserByLoginName(loginUserName);
  37.         timer = new Timer(true);
  38.         long delay = 0;
  39.         OrderTimeTask orderTimeTask = new OrderTimeTask(user,session);
  40.         timer.schedule(orderTimeTask,delay, 60000);// 设定指定的时间time,此处为1分钟
  41.     }


  42.     class OrderTimeTask extends TimerTask{
  43.         private User user;
  44.         private WebSocketSession session;

  45.         public OrderTimeTask(User user,WebSocketSession session){
  46.             this.user = user;
  47.             this.session = session;
  48.         }

  49.         @Override
  50.         public void run() {
  51.             try {
  52.                 String reminder = acceptedWorkOrderService.getLastReminderOrder(user.getId());
  53.                 TextMessage textMessage = new TextMessage(reminder);
  54.                 handleMessage(session,textMessage);
  55.             } catch (Exception e){
  56.                 e.printStackTrace();
  57.             }

  58.         }
  59.     }
  60.     @Override
  61.     public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {
  62.         System.out.println("Connection Closed!");
  63.     }


  64. }
复制代码
  1. package com.oasis.crm.controller.websocket;

  2. import org.springframework.http.server.ServerHttpRequest;
  3. import org.springframework.http.server.ServerHttpResponse;
  4. import org.springframework.web.socket.WebSocketHandler;
  5. import org.springframework.web.socket.server.support.HttpSessionHandshakeInterceptor;

  6. import java.util.Map;


  7. public class HandshakeInterceptor extends HttpSessionHandshakeInterceptor {
  8.    
  9.     @Override
  10.     public boolean beforeHandshake(ServerHttpRequest request,
  11.             ServerHttpResponse response, WebSocketHandler wsHandler,
  12.             Map<String, Object> attributes) throws Exception {
  13.         return super.beforeHandshake(request, response, wsHandler, attributes);
  14.     }

  15.     @Override
  16.     public void afterHandshake(ServerHttpRequest request,
  17.             ServerHttpResponse response, WebSocketHandler wsHandler,
  18.             Exception ex) {
  19.         super.afterHandshake(request, response, wsHandler, ex);
  20.     }
  21. }
复制代码
或者前台拉定时取消息

  1. setInterval(()=> {
  2.             this.getReminders();
  3.         }, 300000);

  4. getReminders(){
  5.         $.getJSON(Remote.acceptedWorkOrder.reminderOrders,packVo=>{
  6.             this.setState({
  7.                 wsMessage:packVo.vo
  8.             });
  9.         });
  10.         if('您有如下工单需要及时处理:'!= this.state.wsMessage&&''!=this.state.wsMessage){
  11.             document.getElementById("wsMsg").style.display = "block";
  12.         }else{
  13.             document.getElementById("wsMsg").style.display = "none";
  14.         }
  15.     }
复制代码
原始地址:
游客,如果您要查看本帖隐藏内容请回复


捡代码论坛-最全的游戏源码下载技术网站! - 论坛版权郑重声明:
1、本主题所有言论和图片纯属会员个人意见,与本论坛立场无关
2、本站所有主题由该帖子作者发表,该帖子作者与捡代码论坛-最全的游戏源码下载技术网站!享有帖子相关版权
3、捡代码论坛版权,详细了解请点击。
4、本站所有内容均由互联网收集整理、网友上传,并且以计算机技术研究交流为目的,仅供大家参考、学习,不存在任何商业目的与商业用途。
5、若您需要商业运营或用于其他商业活动,请您购买正版授权并合法使用。 我们不承担任何技术及版权问题,且不对任何资源负法律责任。
6、如无法链接失效或侵犯版权,请给我们来信:jiandaima@foxmail.com

回复

使用道具 举报

*滑块验证:
您需要登录后才可以回帖 登录 | 立 即 注 册

本版积分规则

技术支持
在线咨询
QQ咨询
3351529868

QQ|手机版|小黑屋|捡代码论坛-专业源码分享下载 ( 陕ICP备15015195号-1|网站地图

GMT+8, 2024-4-19 19:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表