STOMP协议简介
STOMP 中文为: 面向消息的简单文本协议
websocket定义了两种传输信息类型:文本信息和二进制信息。类型虽然被确定,但是他们的传输体是没有规定的。所以,需要用一种简单的文本传输类型来规定传输内容,它可以作为通讯中的文本传输协议。
STOMP是基于帧的协议,客户端和服务器使用STOMP帧流通讯
一个STOMP客户端是一个可以以两种模式运行的用户代理,可能是同时运行两种模式。
- 作为生产者,通过
SEND框架将消息发送给服务器的某个服务 - 作为消费者,通过
SUBSCRIBE制定一个目标服务,通过MESSAGE框架,从服务器接收消息。
例如,最简单的一套遵守stomp协议的WebSocket传输是这样的:
- 请求连接 ↑
["CONNECT\naccept-version:1.1,1.0\nheart-beat:10000,10000\n\n\u0000"]
- 连接成功 ↓
a["CONNECTED\nversion:1.1\nheart-beat:0,0\n\n\u0000"]
- 订阅信息 ↓
["SUBSCRIBE\nid:sub-0\ndestination:/simple/aei\n\n\u0000"]
- 发送消息 ↓
["SEND\ndestination:/get/handle\ncontent-length:308\n\n{"data":{"num":1}\u0000"]
- 接收消息 ↑
a["MESSAGE\ndestination:/simple/aei\ncontent-type:application/json\nsubscription:sub-0\nmessage-id:mv22ldoi-0\ncontent-length:18\n\n{"content":"1"}\u0000"]
其中↓是指向服务器发送下行,而↑是服务器向客户端发送上行,整个过程都保持着websocket长连接。STOMP协议让websocket的消息通讯更加规范和有效率。
如何在微信小程序中使用STOMP协议
由于微信小程序的SocketTask是不支持STOMP协议的,所以我们需要进行封装并改造stompjs来完善功能。
具体解决和改造方案可以查看我的这篇 微信小程序的websocket使用stomp协议--简单实用的npm包 - 掘金 (juejin.cn)
目前,我已经将stomp协议封装在了wx-stomp的包下,并且在公司项目中投入使用,根据特定的需求,完善封装了stomp的必须的接口,使用方法可以见: wx-stomp - npm (npmjs.com)
如果你正在苦于如何让微信小程序支持stomp协议,这个npm包可能可以成为你的一项可选方案。并且作者也在积极的更新和完善wx-stomp。当前可支持包括连接,断开,订阅,发送,取消订阅,包括对各阶段的错误处理和提示。
当然,如果你觉得npm包依旧缺少一些功能,也可以参与到开源中,一起完善!