WebSocket 的一些简单页面推送使用
因为做通信项目的时候,需要实时获取每个分机的当前状态,发现websocket还不错,只是对浏览器的要求比较高,
针对特定用户推送消息,网上有一些
public class GetHttpSessionConfigurator extends ServerEndpointConfig.Configurator{
@Override
public void modifyHandshake(ServerEndpointConfig config,HandshakeRequest request,HandshakeResponse response){
HttpSession httpSession = (HttpSession)request.getHttpSession();
config.getUserProperties().put(HttpSession.class.getName(),httpSession);
}
}
//@ServerEndpoint(value="/websocket",configurator=GetHttpSessionConfigurator.class)
在open方法加入参数,进行实现,最后发现获取不到session,为null。 然后通过他们说的在监听器内,把session也加入,最后可以获取session,却发现用户的session会改变
两个httpSession 不是一个值。实在没办法用啦下面的法子。。。。。。。。
实际点,代码奉上:
jsp:
<script type="text/javascript">
var BASE_PATH="${pageContext.request.contextPath}";//项目名称
var iphost="${iphost}";//服务器ip+端口
var session="${session}";//针对特定用户推送时,实在找不到方法只能笨点,把每个用户放去缓存,通过后台闯入页面
var ws;
$(function(){
ws = new WebSocket("ws://"+iphost+"/${pageContext.request.contextPath }/websocket?"+session);
ws.onopen = function(evn){
//console.log(evn);
};
ws.onmessage = function(evn){
var data = evn.data+'';
//console.log(data);
if(data.indexOf("挂机原因")>-1){
UIkit.modal.alert(evn.data);
}else if(data.indexOf("来电弹屏")>-1){
var tpphone=data.replace("来电弹屏", "");
var rw=document.body.clientWidth-800;
var rh=document.body.clientHeight-600;
window.open(BASE_PATH+'/main/asterisktest/bomb?phone='+tpphone,"","toolbar=yes, location=yes, directories=no, status=no, menubar=yes, scrollbars=yes, resizable=no, copyhistory=yes, width=800, height=600,top="+rh+", left="+rw);
}else{
var json=eval('('+data+')');
var div = $("#"+json["id"]);
div.html(json["statusname"]);
}
};
ws.onclose = function(evn){
//console.log("关闭");
};
ws.onError=function(evn){
// console.log('Error occured: ' + evt.data);
};
});
</script>
java:
//@ServerEndpoint(value="/websocket",configurator=GetHttpSessionConfigurator.class)
@ServerEndpoint(value="/websocket")
public class WebSocket {
public WebSocket(){
}
//给所有的用户推送消息
public static void broadcastAll(JSONObject jsono){
ListIterator it=WEBApp.AppSession.listIterator();
while(it.hasNext()){
try {
((Session)it.next()).getBasicRemote().sendText(jsono.toString());
} catch (Exception e) {
e.printStackTrace();
}
}
}
//给指定用户发送消息
public static void broadcast(String key,String value){
MapCacheUtil mapc=MapCacheUtil.getInstance();
try {
if(mapc.getWebsession(key)!=null){
mapc.getWebsession(key).getBasicRemote().sendText(value);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@OnOpen//,EndpointConfig config
public void onopen(Session session){
System.out.println("连接成功");
MapCacheUtil mapc=MapCacheUtil.getInstance();
mapc.putWebsession(session.getQueryString(), session);
try {
WEBApp.AppSession.add(session);
session.getBasicRemote().sendText("hello client...");
} catch (IOException e) {
e.printStackTrace();
}
}
@OnClose
public void onclose(Session session){
WEBApp.AppSession.remove(session);
System.out.println(session.getId()+"close....");
}
@OnMessage
public void onsend(Session session,String msg){
try {
session.getBasicRemote().sendText(msg);
} catch (IOException e) {
e.printStackTrace();
}
}
//保存所有Websocket Session 的值
public class WEBApp {
public static Vector<javax.websocket.Session>
AppSession=new Vector<javax.websocket.Session>();
}
也没什么经验,不足的大家提出建议,起码功能实现啦。。
WebSocket 的一些简单页面推送使用的更多相关文章
- 基于page的简单页面推送技术
我们可以先看下简单效果,打开2个页面可以看到推送效果 服务端我们只需要下面一个方法 using System; using System.Collections.Generic; using Syst ...
- 结合实际需求,在webapi内利用WebSocket建立单向的消息推送平台,让A页面和服务端建立WebSocket连接,让其他页面可以及时给A页面推送消息
1.需求示意图 2.需求描述 原本是为了给做unity3d客户端开发的同事提供不定时的消息推送,比如商城购买道具后服务端将道具信息推送给客户端. 本篇文章简化理解,用“相关部门开展活动,向全市人民征集 ...
- Spring之WebSocket网页聊天以及服务器推送
Spring之WebSocket网页聊天以及服务器推送 转自:http://www.xdemo.org/spring-websocket-comet/ /Springframework /Spring ...
- 最简单的推送--uexGetui
个推插件使用指南 配置方法这里不再复述,详情请参见插件接入指引 怎样创建一个最简单的推送? //只需要两个方法 uexGetui.initialize(data); uexGetui.onInitia ...
- H5 EventSource 实现web页面推送功能demo
/** * H5 EventSource 实现web页面推送功能demo */ var serverData,statusDiv; var SERVER_URL = "index.php&q ...
- 在Openfire上弄一个简单的推送系统
推送系统 说是推送系统有点大,其实就是一个消息广播功能吧.作用其实也就是由服务端接收到消息然后推送到订阅的客户端. 思路 对于推送最关键的是服务端向客户端发送数据,客户端向服务端订阅自己想要的消息.这 ...
- Android中脱离WebView使用WebSocket实现群聊和推送功能
WebSocket是Web2.0时代的新产物,用于弥补HTTP协议的某些不足,不过他们之间真实的关系是兄弟关系,都是对socket的进一步封装,其目前最直观的表现就是服务器推送和聊天功能.更多知识参考 ...
- v-charts 和 websocket实现数据展示动态推送
v-charts https://v-charts.js.org/#/ ELEMENT力作: 在使用 echarts 生成图表时,经常需要做繁琐的数据类型转化.修改复杂的配置项,v-charts 的出 ...
- Django2.0.4 + websocket 实现实时通信,主动推送,聊天室及客服系统
webSocket是一种在单个TCP连接上进行全双工通信的协议. webSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据.在WebSocket API中,浏览器 ...
随机推荐
- bean的scope属性
1.singleton (默认属性) Spring将Bean放入Spring IOC容器的缓存池中,并将Bean引用返回给调用者,spring IOC继续对这些Bean进行后续的生命管理.Bean ...
- mongodb09----replicattion set--健壮性
replication set复制集 replicattion set 多台服务器维护相同的数据副本,提高服务器的可用性.一台是服务器出问题了另外2台还可以接收干,secondary平时保持只读状态, ...
- YTU 2432: C++习题 对象数组输入与输出
2432: C++习题 对象数组输入与输出 时间限制: 1 Sec 内存限制: 128 MB 提交: 1603 解决: 1152 题目描述 建立一个对象数组,内放n(n<10)个学生的数据( ...
- YTU 2891: E--围栏
2891: E--围栏 时间限制: 1 Sec 内存限制: 128 MB 提交: 91 解决: 24 题目描述 一串连续字符被称作围栏当且仅当它由间隔的'|'和'-'组成.比如"|-|- ...
- Android沉浸式状态栏(透明状态栏)最佳实现
Android沉浸式状态栏(透明状态栏)最佳实现 在Android4.4之前,我们的应用没法改变手机的状态栏颜色,当我们打开应用时,会出现上图中左侧的画面,在屏幕的顶部有一条黑色的状态栏,和应用的风格 ...
- Java 并发 —— 读写锁(ReadWriteLock)
读写锁(ReadWriteLock),顾名思义,就是在读写某文件时,对该文件上锁. 1. ReentrantReadWriteLock 三部曲: 加锁: 读写操作: 解锁:(为保证解锁操作一定执行,通 ...
- BZOJ_4459_[Jsoi2013]丢番图_数学+分解质因数
BZOJ_4459_[Jsoi2013]丢番图_数学+分解质因数 Description 丢番图是亚历山大时期埃及著名的数学家.他是最早研究整数系数不定方程的数学家之一. 为了纪念他,这些方程一般被称 ...
- MemCache在Windows下环境的搭建及启动
sc create "memcached-11212" start= auto binPath= "D:\memcached_en32or64\x64\memcached ...
- saltstack源码-启动1
决定看salt的源码了.干脆就从最基本的看起来,先看它的启动过程开始第一步用/etc/init.d/salt-master start 启动找到那个文件,发现有3种启动方式,suse,debian,c ...
- Windows JDK 1.8降级为1.7方法
转自:https://www.aliyun.com/jiaocheng/890626.html 正常情况下,JDK的升降级只需更改环境变量即可 可是到了1.8版本,Oracle使了一点小手段, 在系统 ...