WebSocket上有标准的PubSub协议吗?



我正在寻找一种在不同语言编写的应用程序之间实现基本发布/订阅的方法,以使用JSON有效负载交换事件。

WebSocket似乎是传输的明显选择,但是您需要在顶部有一个(可以说很小的(层来实现一些管道:

  • 聚合代表 pubsub 域的消息"订阅主题"、"发布消息"
  • 聚合底层消息("检测信号"、"身份验证"(

我期待为此找到一个明显的标准,但似乎没有任何标准。

  • WAMP 经常被引用,但根据我(短暂(的经验,服务器/客户端库的实现不是很好
  • STOMP经常被提及,但根据我(甚至更短的(经验,情况更糟
  • 凤凰频道很好,但它们仅限于凤凰/长生不老药世界,而不是标准的(因此可以在任何凤凰版本中更改消息,恕不另行通知。

那么,是否每个人都在使用MQTT/WS(这需要另一个代理组件,而不是简单的服务器?还是 gRPC ?

每个人都只是从头开始重新实现它吗?(这是那些看起来很容易做到的事情之一,但我想你最终会得到一个半生不熟、指定不佳、破碎的版本......

还是通过 WS 从服务器提供数据流的想法从根本上破坏了?

WebSocket 库有两个主要类:实现协议并将其余部分留给开发人员的库,以及那些在协议之上构建的具有实时消息传递应用程序通常需要的各种附加功能,例如恢复丢失的连接、发布/订阅和频道、身份验证、授权等。

后一种类型通常要求在客户端使用自己的库,而不仅仅是使用浏览器提供的原始 WebSocket API。因此,确保您对它们的工作方式和提供的内容感到满意变得至关重要。一旦所选解决方案集成到您的体系结构中,您可能会发现自己被锁定在所选解决方案的做事方式中,并且可靠性、性能和可扩展性方面的任何问题都可能再次困扰您。

ws,faye-websockets,socket.io,μWebSockets和SocketCluster是一些不错的开源选项。

服务器可以处理的并发连接数很少是服务器负载的瓶颈。大多数体面的 WebSocket 服务器可以支持数千个并发连接,但是一旦 WebSocket 服务器进程处理了实际数据的接收,处理和响应消息所需的工作负载是多少?


通常,会有各种潜在的问题,例如在数据库中读取和写入、与游戏服务器的集成、为每个客户端分配和管理资源等。

一旦一台机器无法处理工作负载,您就需要开始添加其他服务器,这意味着现在您需要开始考虑负载平衡、连接到不同服务器的客户端之间的消息同步、对客户端状态的通用访问,无论连接寿命或客户端连接到的特定服务器如何 - 列表不胜枚举。

在实现对 WebSocket 协议的支持时,不仅涉及客户端和服务器实现细节,还涉及对其他传输的支持,以确保对不同客户端环境的强大支持,以及更广泛的关注点,例如身份验证和授权、有保证的消息传递、可靠的消息排序、历史消息保留、 等等。在这种情况下,如果您宁愿避免重新发明轮子,那么像 Able Realtime 这样的数据流网络将是一个不错的选择。

有一篇关于WebSockets,Pub/Sub以及与扩展相关的问题的好文章,我建议阅读。

完全披露:我是 Ably 的开发者倡导者,但我希望这能真正回答你的问题。

最新更新