/**
* 依赖文件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插件的更多相关文章

  1. STOMP Over WebSocket

    Show Table of Contents What is STOMP? STOMP is a simple text-orientated messaging protocol. It defin ...

  2. 文档 - STOMP Over WebSocket

    http://jmesnil.net/stomp-websocket/doc/ What is STOMP? STOMP is a simple text-orientated messaging p ...

  3. Jmeter websocket插件安装与使用

    Jmeter websocket插件安装与使用 Apache JMeter是Apache组织开发的基于Java的压力测试工具.用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试 ...

  4. Springboot + Websocket + Sockjs + Stomp + Vue + Iview 实现java后端日志显示在前端web页面上

    话不多说,看代码. 一.pom.xml 引入spring boot websocket依赖 <dependency> <groupId>org.springframework. ...

  5. springboot实现服务器端消息推送(websocket + sockjs + stomp)

    服务器端推送技术在web开发中比较常用,可能早期很多人的解决方案是采用ajax向服务器轮询消息,这种方式的轮询频率不好控制,所以大大增加了服务器的压力,后来有了下面的方案:当客户端向服务器发送请求时, ...

  6. spring+rabbitmq+stomp搭建websocket消息推送(非spring boot方式)

    前言: 两年前做过spring+activemq+stomp的ws推送,那个做起来很简单,但现在公司用的mq中间件是rabbitmq,因此需要通过rabbitmq去做ws通信.仔细搜了搜百度/谷歌,网 ...

  7. Jmeter使用Websocket插件测试SingalR,外加还有阿里云PTS的Jmeter原生测试爬坑日志。

    题外话:距离我的上一篇博客已经过去7年多了,我实在是个不务正业的程序员,遇到测试方面的东西总想分享一下,因为可用的资料实在太少了(包括国外的资料). 本人不喜欢授人以鱼,所以不会直接给出问题和解决方案 ...

  8. WebSocket插件

    ;!(function(window){ "use strict"; let Event = { wsMesEvent:function(message){ console.log ...

  9. Jquery封装: WebSocket插件

    1 $(function() { var websocket = null; //浏览器是否支持websocket if ("WebSocket" in window) { try ...

随机推荐

  1. 在线程中显示一个窗口(多个UI线程)

    多数耗时操作可以异步执行,推荐async/await. 但和UI相关的部分仅能在UI线程执行,这时UI线程的耗时操作,导致界面卡死,不够友好. 我们可以创建一个单独的UI线程显示一个正在加载的窗口,可 ...

  2. jq初始,选择器,事件,内容操作,样式操作

    jq操作页面文档http://jquery.cuishifeng.cn/ jq初始 <!DOCTYPE html> <html> <head> <meta c ...

  3. 爬虫最新的库requests-html库总结

    requests-html是比较新的爬虫库,作者和requests是同一个作者 一.安装依赖 pip install requests-html 我们可以在安装的时候看到他安装了lxml,reuqes ...

  4. CamlQuery对SharePointOnline List 发起查询请求

    最近的项目中遇到了一个需求,需要向SharePointList 查询Item是否存在,找到了CamlQuery这样一个方法,但是没有找到使用这个接口的频率限制说明文档,于是就有了这篇随笔. 新接触这个 ...

  5. 【Gradle】Android Gradle 高级自定义

    Android Gradle 高级自定义 使用共享库 Android的包,如android.app,android.content,android.view,android.widget等,是默认包含 ...

  6. [20191101]通过zsh计算sql语句的sql_id.txt

    [20191101]通过zsh计算sql语句的sql_id.txt 1.简单介绍以及测试使用zsh遇到的问题:--//前段时间写的,链接http://blog.itpub.net/267265/vie ...

  7. nvprof 使用记录; 以及使用 nvprof 查看tensorflow-gpu 核函数运行记录

    最近需要使用 nvprof 此时cuda 程序运行的性能,下面对使用过程进行简要记录,进行备忘: 常用使用命令:nvprof --unified-memory-profiling off python ...

  8. tensorflow 资源汇总-docker 运行 tensorflow-gpu on nvidia support

    tensorflow 容器运行过程中使用到的命令记录: 使用image启动容器命令: docker run --name=: tensorflow/tensorflow:latest-gpu-py3- ...

  9. npm i xxxx -D和npm i xxxx-S的区别

    npm i xxxx -D 就是 npm i xxxx --save-dev 是把依赖写入进devDependencies对象里面 devDependencies 是开发环境下的依赖,这里是开发环境下 ...

  10. 《算法问题实战策略》 BOGGLE

    oj地址是韩国网站 连接比较慢 https://algospot.com/judge/problem/read/BOGGLE大意如下 输入输出 输入 URLPM XPRET GIAET XTNZY X ...