stompjs应用的简单封装

CodeRover
• 阅读 4683
一个stompjs的简单应用

stompjs应用的简单封装

在线demo

在线演示:click here
github: https://github.com/chuxiaoguo/wrapper-stompjs

介绍

sockjs-client

sockjs-client是从SockJS中分离出来的用于客户端使用的通信模块.所以我们就直接来看看SockJS.SockJS是一个浏览器的JavaScript库,它提供了一个类似于网络的对象,SockJS提供了一个连贯的,跨浏览器的JavaScriptAPI,它在浏览器和Web服务器之间创建了一个低延迟,全双工,跨域通信通道.你可能会问,我为什么不直接用原生的WebSocket而要使用SockJS呢?这得益于SockJS的一大特性,一些浏览器中缺少对WebSocket的支持,因此,回退选项是必要的,而Spring框架提供了基于SockJS协议的透明的回退选项。SockJS提供了浏览器兼容性,优先使用原生的WebSocket,如果某个浏览器不支持WebSocket,SockJS会自动降级为轮询.

stomjs

STOMP(Simple Text-Orientated Messaging Protocol) 面向消息的简单文本协议;
WebSocket是一个消息架构,不强制使用任何特定的消息协议,它依赖于应用层解释消息的含义.
与HTTP不同,WebSocket是处在TCP上非常薄的一层,会将字节流转化为文本/二进制消息,因此,对于实际应用来说,WebSocket的通信形式层级过低,因此,可以在 WebSocket 之上使用STOMP协议,来为浏览器 和 server间的 通信增加适当的消息语义。

使用

导入包

1. npm install --save sockjs-client@1.0.0
2. npm install --save stompjs@2.3.3
3. npm install --save wrapper-stompjs

示例

1. 导入文件websock.js
2. 通过构造函数新建一个websocket实例(可以通过传入参数修改实例属性),同时传入接收消息的回调
3. 调用init方法启动ws的推送

4. 调用destroyed销毁实例,并停止推送

  
import {WebSocketFactory} from 'wrapper-stompjs';

const config = {

debug: true,

socketId: '408755***@qq.com',

socketTicket: Cookie.getToken(),

socketUrl: '//113.88.13.224:9205/bas-ws-endpoint',

subscribeTag: '/user-ws/' + this.socketId + '/ws/noticeCenter',

sendMsgTag: '/bas-ws-receive/ws/noticeCenterHeartBeat'

}

// 创建ws实例

const ws = new WebSocketFactory(

config,

(message) => {

  // 接收到推送的消息

},

(success) => {

// 成功连接回调

console.log(success);

},

(err) => {

// 连接失败的回调

console.log(err);

}

);

// 开启ws推送

ws.init();

// 关闭ws推送

ws.stopConnect();

// 销毁实例

ws.destroyed();

如果你想做失败重连机制,可以通过监听失败的回调,重新调用init方法,直到执行成功的回调

api

public

属性 说明
socketId socketId的标识,一般是用户的账号(邮件,手机号),如果都不是,则是一个时间戳
socketTicket socket的Ticket,即用户的ticket,一般从cookie中取
heartBeatTime 心跳发送的间隔时间,默认是1分钟
debug 是否开启debug模式,默认是开启
socketUrl socket的订阅地址
subscribeTag socket的订阅地址后缀标签
sendMsgTag 订阅发送心跳的地址
interface WebSocketParams {

socketId?: string,  
socketUrl?: string,  
socketTicket?: string,  
subscribeTag?: string,  
sendMsgTag?: string,  
heartBeatTime?: number,  
debug?: boolean;

}

type newWsType = new (

config?: WebSocketParams,

(message) => {

  // 接收到推送的消息

},

(success) => {

// 成功连接回调

console.log(success);

},

(err) => {

    // 连接失败的回调

    console.log(err);

)
}
方法 说明
new () 初始化ws实例,参数一是配置(如果没有,填null),参数二注册推送消息的回调(选填),参数三连接成功的回调(选填),参数四是连接失败的回调(选填)
init() 开启ws推送
stopConnect() 断开websocket推送
destroyed() 销毁websocket实例

private

方法 说明
receiveMQCb 接收消息的回调
connectSucCb 接收消息的回调
connectErrCb 接收消息的回调
stompClient stomp对象
subscription stomp订阅对象的引用
timer 轮训器的引用
initWebSocketProp() 初始化配置项
createdSocketId() 如果没有指定的socketId,会从localStorage,建议传入socketId
onConnect() ws连接成功的回调
pollSendHeartBeat() 发送心跳
onError() 推送异常
点赞
收藏
评论区
推荐文章
blmius blmius
4年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
zhenghaoz zhenghaoz
5年前
算法笔记:B树
B树广泛应用于各种文件系统,文件系统中,数据都是按照数据块来进行读取操作。结合二叉树的优点和文件系统的特点,于是就有了B树:btree(https://imghelloworld.osscnbeijing.aliyuncs.com/imgs/ae3caa193bc4c55f0519114b15313721.png)B树当中每个节点存储
梦
5年前
微信小程序new Date()转换时间异常问题
微信小程序苹果手机页面上显示时间异常,安卓机正常问题image(https://imghelloworld.osscnbeijing.aliyuncs.com/imgs/b691e1230e2f15efbd81fe11ef734d4f.png)错误代码vardate'2021030617:00:00'vardateT
Stella981 Stella981
4年前
PHP代码静态分析工具PHPStan
<blockquote最近发现自己写的PHP代码运行结果总跟自己预想的不一样,排查时发现大多是语法错误,在运行之前错误已经种下。可能是自己粗心大意,或者说<codephpl</code检测太简单,不过的确是有一些语法错误埋藏得太深(毕竟PHP是动态语言),那么有没有办法,在代码代码正式运行之前,把语法错误全找出来呢?</blockquote<p
Stella981 Stella981
4年前
Exceptionless
<divid"cnblogs\_post\_body"class"blogpostbodycnblogsmarkdown"<h1id"exceptionless.netcore开源日志框架"Exceptionless.NetCore开源日志框架</h1<blockquote<p作者:markjiang7m2<b
Wesley13 Wesley13
4年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Wesley13 Wesley13
4年前
PHP算法之判断是否是质数
<h3质数的定义</h3<blockquote质数又称素数。一个大于1的自然数,除了1和它自身外,不能整除其他自然数的数叫做质数;否则称为合数。</blockquote<h3实现思路</h3<p循环所有可能的备选数字,然后和中间数以下且大于等于2的整数进行整除比较,如果能够被整数,则肯定不是质数,相反,就是质数。</p<h3第一种算
Wesley13 Wesley13
4年前
ES6 新增的数组的方法
给定一个数组letlist\//wu:武力zhi:智力{id:1,name:'张飞',wu:97,zhi:10},{id:2,name:'诸葛亮',wu:55,zhi:99},{id:3,name:'赵云',wu:97,zhi:66},{id:4,na
似梦清欢 似梦清欢
3年前
C语言易错内容汇总
!image(https://imghelloworld.osscnbeijing.aliyuncs.com/imgs/3dc55e061bdab8d2c66dcdf6d51bf99f.png)