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 ...
随机推荐
- Java入门系列之类继承、抽象类、接口(五)
前言 C#和Java关于类.抽象类.接口使用方式基本相似,只是对应关键字使用不同罢了,本节呢,我们只是对照C#和Java中关于这三个概念在具体使用时,看看有哪些不一样的地方. 类继承 C#和Java在 ...
- 为什么老外不愿意用MyBatis?
作者:陈龙 www.zhihu.com/question/309662829 Spring 团队的Josh Long自己在Twitter上做了一个调查.1625次投票,样本量不算大,但也能说明问题.和 ...
- [WPF 自定义控件]让Form在加载后自动获得焦点
1. 需求 加载后让第一个输入框或者焦点是个很基本的功能,典型的如"登录"对话框.一般来说"登录"对话框加载后"用户名"应该马上获得焦点,用 ...
- 资深程序员告诉你为什么要用Python3而不是Python2
经常遇到这样的问题:<现在开始学习python的话,是学习python2.x还是学习python3.x比较好?>,这也是许多初学者会遇到的问题,我们的答案是python 3.x. 为了帮助 ...
- 面试题:python 中 staticmethod 和 classmethod有什么区别
面试中经常会问到staticmethod 和 classmethod有什么区别? 首先看下官方的解释: staticmethod: class staticmethod staticmethod(fu ...
- 一则sql优化实现接口耗时降低30倍的优化案例
业务场景: 也测的业务,如上图,通过捕获业务的涉及的接口如下: 查询接口耗时大于7s,已经是非常的慢 经验提示: 一般接口响应时间慢的问题,最简单的方式就是监控接口相关的sql是否存在问题 开启mys ...
- 如何制作gif图片?教你把gif图片缩小100倍大小的妙招!
移动互联网是短视频的时代,5G的到来更是让短视频蓬勃发展,视频的发展让人们看到了动态的机会,图片也需要动起来,图片动起来应该是比较早的,gif图片很早就有,我们常见的动态表情,现在用的比较多的是视频的 ...
- subprocess, re模块,logging, 包等使用方法
subprocess, re模块,logging, 包等使用方法 subprocess ''' subprocess: sub: 子 process: 进程 可以通过python代码给操作系统终端发送 ...
- windows下安装react
在 Windows 10 64 下创建 React App 由 SHUIJINGWAN · 2018/03/26 1.在官方网站:https://nodejs.org/zh-cn/ 下载推荐版本: ...
- Python—实现钉钉后台开发
二.实现钉钉免登流程 免登流程分四步:1.前端获取钉钉免登授权码code:2.后端获取access_token:3.使用授权码code和access_token换取用户userid:4.通过acces ...