STOMP 客户端开发
需求
客户端需要彼此通信,如主持人需要能够控制所有客户端的第三方应用开启权限
主要问题
目前的c/s模型中是客户端主动连接服务器,客户端发出请求,服务器给出响应,缺少信息主动从服务器流向客户端的流程。
可选方案
-
在客户端上开启服务器接收主动连接请求,如基于TCP的服务器、基于HTTP的服务器等。
主要问题是在客户端上再监听一个端口看起来非常冗余。
-
轮询,客户端定时向服务器查询是否有信息更新。
主要问题是这会产生非常多无意义的查询,如果客户端足够多也会对服务器造成负担。保证对每个客户端不重不漏地推送信息也让服务端代码稍显复杂。
-
客户端主动建立长连接,阻塞式地读取来自服务端的信息,使得客户端之间的消息传递经过客户端–服务器–客户端这样的路径完成。
这是最终选定的方案
方案细节
我们通过基于websocket的STOMP协议实现具体方案。
我负责开发客户端部分
由于我们的STOMP协议运行在websocket协议上,因此我使用了WebSocketSharp库实现websocket通信。
对于STOMP的客户端,在网上并没有找到成型的C# 库,但是好在STOMP协议相对简单,我根据当前项目需要实现了一个项目定制的STOMP客户端。
STOMP协议简介
STOMP即Simple (or Streaming) Text Orientated Messaging Protocol,