用websocket实现后台推送消息
1前台实现
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";
}
}
用websocket实现后台推送消息的更多相关文章
- DWR实现后台推送消息到web页面
DWR简介 DWR(Direct Web Remoting)可用于实现javascript直接调用java函数和后台直接调用页面javascript代码,后者可用作服务端推送消息到Web前端. (服务 ...
- [代码]Java后台推送消息到IOS前端
PayLoad payLoad = new PayLoad(); payLoad.addAlert("test"); //手机端的提示消息 payLoad.addBadge( ...
- 结合实际需求,在webapi内利用WebSocket建立单向的消息推送平台,让A页面和服务端建立WebSocket连接,让其他页面可以及时给A页面推送消息
1.需求示意图 2.需求描述 原本是为了给做unity3d客户端开发的同事提供不定时的消息推送,比如商城购买道具后服务端将道具信息推送给客户端. 本篇文章简化理解,用“相关部门开展活动,向全市人民征集 ...
- Websocket实现Java后台主动推送消息到前台
写在前面 需求: 项目测试, 缺少用户登录失败给admin推送消息, 想到这个方式, 当用户登录失败时, admin用户会在页面看到咣咣乱弹的alert. 正文 pom.xml <!-- web ...
- Java Springboot webSocket简单实现,调接口推送消息到客户端socket
Java Springboot webSocket简单实现,调接口推送消息到客户端socket 后台一般作为webSocket服务器,前台作为client.真实场景可能是后台程序在运行时(满足一定条件 ...
- 模拟websocket推送消息服务mock工具二
模拟websocket推送消息服务mock工具二 在上一篇博文中有提到<使用electron开发一个h5的客户端应用创建http服务模拟后端接口mock>使用electron创建一个模拟后 ...
- spring集成webSocket实现服务端向前端推送消息
原文:https://blog.csdn.net/ya_nuo/article/details/79612158 spring集成webSocket实现服务端向前端推送消息 1.前端连接webso ...
- Android APP切换到后台接收不到推送消息
1. Android端进程被杀死后,目前自带的保护后台接收消息活跃机制.暂时没有什么好的机制保持任何情况下都活跃 android原生系统用home键杀进程可以起来,如果是强行停止就只能用户自己手动 ...
- Spring Boot 集成 WebSocket 实现服务端推送消息到客户端
假设有这样一个场景:服务端的资源经常在更新,客户端需要尽量及时地了解到这些更新发生后展示给用户,如果是 HTTP 1.1,通常会开启 ajax 请求询问服务端是否有更新,通过定时器反复轮询服务端响应的 ...
随机推荐
- Mysql个人语句笔记
--一些简单语句记录: /*mysql*/SHOW DATABASES CREATE DATABASE guoDROP DATABASE guo /*查看创建的数据库*/SHOW CREATE DAT ...
- des和Rijndael加密
------------IV的作用: 为了保证数据的安全,.NET基类库中提供的私钥算法类使用称作密码块链(CBC,Cipher Block Chaining)的链模式,算法使用一个密钥和一个初始化向 ...
- win7 64位系统装oracle11 提示环境变量path 值超过1023字符
win7 64位系统装oracle10 提示环境变量path 值超过1023字符 1.提示环境变量path 值超过1023字符. 方案: 1.oracle安装文件,右键属性--设置兼容性--兼容XP ...
- 5 MySQL索引
目录: 1. 索引概述 1.1 为什么引入索引 1.2 什么是索引 1.3 索引的好处 1.4 索引的不足 1.5 索引分类 2. 索引设计原则 3. 索引建立和删除 3.1 索引创建 3.2 索引删 ...
- 字符串匹配算法 之 基于DFA(确定性有限自动机)
确定有限自动机定义:http://en.wikipedia.org/wiki/Deterministic_finite_automaton 自动机在字符串匹配中的应用 #include<stdi ...
- Stimulsoft.Report.net报表简单实用
1 using System; using System.Collections.Generic; using System.Linq; using System.Web; using System. ...
- [置顶] Android事件—单选按键和下拉按键
在平常的开发中单选按键和下拉按键是非常常用的2个点击事件.首先介绍下单选按键 1:单选按键,单选的主键是radiogroup 这个主键也是很重要的 首先介绍下主键的布局 <?xml versio ...
- [转]ARM64 Function Calling Conventions
from apple In general, iOS adheres to the generic ABI specified by ARM for the ARM64 architecture. H ...
- html5实现饼图和线图
html5实现饼图和线图-我们到底能走多远系列(34) 我们到底能走多远系列(34) 扯淡: 送给各位一段话: 人生是一个不断做加法的过程 从赤条条无牵无挂的来 到学会荣辱羞耻 ...
- CenOS下安装Eclipse并配置PyDev
为方便安装,使用SecureCRT来操作CentOS 1. 更改网络配置 虚拟机使用桥接方式上网(默认是NAT方式) 2. 启动后让虚拟机上网 3. 启动终端查看ip地址 4. 使用SecureCRT ...