sockjs+stomp的websocket插件
/**
* 依赖文件sockjs.js、stomp.js
* */
;!(function (window) {
'use strict'
let WS = function () {
//保存所有的订阅事件 {Aevent:[pubfun(status,data),pubfun(status,data),...]}
this.subEvents = {};
this.isConnect = false;
this.stompClient = null;
this.selfClose = false;
this.ws = null;
this.url = null;
}; WS.prototype = {
constructor: WS
//设置连接状态
, setConnect(status) {
this.isConnect = status;
}
//建立连接
, connect(url) {
//若没有连接,才连接
this.isConnect = false;
this.url = url;
this.ws = new SockJS(url);
this.stompClient = Stomp.over(ws);
this.stompClient.connect({}, (data) => {
this.setConnect(true);
this.connectSuc.apply(this, [stompClient, data]);
}, (error) => {
this.setConnect(false);
this.connectErr.apply(this,[stompClient,error]);
});
this.ws.onclose = (e) => {
this.isConnect = false;
if(!this.selfClose){
this.reConnect();
}
}
return stompClient;
}
//手动断开连接
, disconnect() {
if(this.stompClient != null && this.isConnect) {
this.stompClient.disconnect();
this.isConnect = false;
this.selfClose = true;
this.ws = null;
this.stompClient = null;
}
}
//重连
, reConnect(){
if(this.isConnect){return;}
this.connect(this.url);
}
//连接成功后的回调
, connectSuc(stompClient, data) {
if(this.isConnect){
//发布连接成功事件
this.trigger.apply(this, ['connectSuc', stompClient.subscribe.bind(stompClient), data]);
//发布发送消息到服务端事件
this.trigger.apply(this, ['sendMessage', stompClient.send.bind(stompClient), data]);
}
}
//连接失败后的回调
, connectErr(stompClient, data){
//发布连接失败事件
this.trigger.apply(this, ['connectErr', stompClient, data]);
}
//发布函数
, trigger(eventType, ...data) {
eventType = this.subEvents[eventType];
for (var i = 0; i < eventType.length; i++) {
eventType[i].apply(this, data);
}
}
//订阅方法 --->用于订阅指定事件
, on(eventType, handle) {
if (!(eventType in this.subEvents)) {
this.subEvents[eventType] = [];
}
this.subEvents[eventType].push(handle);
}
//删除订阅
, off(eventType, handle) {
eventType = this.subEvents[eventType];
if (eventType) {
let handleIndex = eventType.indexOf(handle);
if (handleIndex >= 0) {
eventType.splice(handleIndex, 1);
}
}
}
};
window.WS = WS;
})(window); /**
*
* var ws = new WS();
ws.connect("/helloWebsocket"); ws.on('connectSuc',function (subscribe,data) {
subscribe('/topic/serverSend', function(response){
info.innerHTML += "<div>"+response+"</div>";
});
subscribe('/topic/serverResponse',function (response) {
info.innerHTML += "<div>"+response+"</div>";
});
}); ws.on('connectErr',function (stompClient,data) { }); //客户端发送消息给服务端
ws.on('sendMessage',function (send,data) {
send("/client/clientSendMessage",{},"hello server !!");
}); //强制关闭窗口后,断开连接
window.onunload = function (ev) {
ws.disconnect();
}
*
* */
sockjs+stomp的websocket插件的更多相关文章
- STOMP Over WebSocket
Show Table of Contents What is STOMP? STOMP is a simple text-orientated messaging protocol. It defin ...
- 文档 - STOMP Over WebSocket
http://jmesnil.net/stomp-websocket/doc/ What is STOMP? STOMP is a simple text-orientated messaging p ...
- Jmeter websocket插件安装与使用
Jmeter websocket插件安装与使用 Apache JMeter是Apache组织开发的基于Java的压力测试工具.用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试 ...
- Springboot + Websocket + Sockjs + Stomp + Vue + Iview 实现java后端日志显示在前端web页面上
话不多说,看代码. 一.pom.xml 引入spring boot websocket依赖 <dependency> <groupId>org.springframework. ...
- springboot实现服务器端消息推送(websocket + sockjs + stomp)
服务器端推送技术在web开发中比较常用,可能早期很多人的解决方案是采用ajax向服务器轮询消息,这种方式的轮询频率不好控制,所以大大增加了服务器的压力,后来有了下面的方案:当客户端向服务器发送请求时, ...
- spring+rabbitmq+stomp搭建websocket消息推送(非spring boot方式)
前言: 两年前做过spring+activemq+stomp的ws推送,那个做起来很简单,但现在公司用的mq中间件是rabbitmq,因此需要通过rabbitmq去做ws通信.仔细搜了搜百度/谷歌,网 ...
- Jmeter使用Websocket插件测试SingalR,外加还有阿里云PTS的Jmeter原生测试爬坑日志。
题外话:距离我的上一篇博客已经过去7年多了,我实在是个不务正业的程序员,遇到测试方面的东西总想分享一下,因为可用的资料实在太少了(包括国外的资料). 本人不喜欢授人以鱼,所以不会直接给出问题和解决方案 ...
- WebSocket插件
;!(function(window){ "use strict"; let Event = { wsMesEvent:function(message){ console.log ...
- Jquery封装: WebSocket插件
1 $(function() { var websocket = null; //浏览器是否支持websocket if ("WebSocket" in window) { try ...
随机推荐
- 在线程中显示一个窗口(多个UI线程)
多数耗时操作可以异步执行,推荐async/await. 但和UI相关的部分仅能在UI线程执行,这时UI线程的耗时操作,导致界面卡死,不够友好. 我们可以创建一个单独的UI线程显示一个正在加载的窗口,可 ...
- JAVA笔记 -- 访问权限控制
访问权限控制 没有权限控制的时候,由于所有的接口都是可以访问的.当一个类库部分代码,发现有更好的方法解决的时候,可能其他接口会发生改动.这会导致另一个地方的引用该类库的程序发生崩溃.为了解决这种问题, ...
- 搭建SSM框架的配置文件
pom.xml所需要的基本依赖和插件: <dependency> <groupId>org.mybatis</groupId> ...
- SSM框架之Spring(2)IOC及依赖注入
Spring(2)IOC及依赖注入 基于xml配置文件的实现 1.IOC (控制反转-Inversion Of Control) 控制反转(Inversion of Control,缩写为IoC),是 ...
- CSS学习笔记-背景属性
一.背景尺寸属性: 1.含义: 背景尺寸属性是CSS3中新增的一个属性,专门用于设置背景图片大小 2.格式: 1.1具体像素: backgro ...
- 网络管理和nmcli命令的使用——网络接口配置-bonding实验步骤
(实验)网络接口配置-bonding Bonding 将多块网卡绑定同一IP地址对外提供服务,可以实现高可用或者负载均衡.直接给两块网卡设置同\一IP地址是不可以的.通过bonding,虚拟一块网 ...
- JVM-2-JVM结构
什么是JVM JVM是可运行Java代码的假想计算机 (或者理解为一种规范),包括一套字节码指令集.一组寄存器.一个栈.一个垃圾回收,堆 和 一个存储方法域.JVM是运行在操作系统之上的 ...
- python通过重启线程,实现服务的热加载
这个思路后来证明不能用于工作. 因为线程调用没有及时返回,所以不能用这种方式来重启服务. 但作为脑洞,也应该作个记录. import os import shutil import datetime ...
- matlab键盘快捷键无法使用的解决办法
打开matlab,在主页里点击 预设/preferences 左栏找 键盘/keyboard 点开键盘点击 快捷方式/shortcuts 在右边 活动设置 /Active settings 里选择 W ...
- IDEA的@Override下面有红色波浪线怎么去掉
测试了 , 不会影响运行 ! 去掉红线 ! file - seting - java compiler - 把两个version都改成1.8 ! ( 因为我的jdk是1.8) file - pr ...