我觉得这是一个很大的问题,我可能无法提供完整的答案。但我会尽力而为 -
首先,WebSocket 只是一个没有 socket close 的标准 Web 请求。因此,您维护的双向套接字上的输入/输出允许推送数据。
通过 WebSocket 发送内容的两种方法是二进制和文本。因此,当您发送一组数据时,另一端将接收到一条消息。根据您的实现或库,您可能会收到一个完成的消息。
由于发送文本相当便宜且通常使用情况下您希望发送结构化格式(例如传输语言 JSON),因此您的接收器(客户端)只需使用 JSON.parse(message)
即可完成任务。
当然,您可以发送任何格式的文本 - 例如 [my content:"my custom format"]
,但那是您自己的实现。
最后,WebSocket 连接非常基础 - 没有框架可以利用。一个回显或广播服务器是一个例子,即“对于任何传入的消息,发送到所有连接的客户端”。发布者/订阅者是另一个常见概念,或称为 WebSocket 术语中的“通道”。当用户连接到您的主服务器时,他们提供一些凭据来进行身份验证和/或标识自己为唯一实体。
TL:DR;
因此,“订阅”更多地是一个概念,允许用户连接并分配到消息流。对于许多现成的库来说,这是免费的。这可以通过格式化的传输文本(如 JSON)来完成。
在服务器上,您处理套接字并构建自己的例程协议。这可以简单地作为具有 ID 的套接字列表。
https://Pusher.com长期以来一直是一个Websocket服务提供商,他们提供了一些关于这个主题的优秀文档。
https://pusher.com/docs/channels
但它总是格式化文本或二进制流。您的服务器将处理任何复杂逻辑。
希望能有所帮助。
on.message()
指令。 - mbilyanov{ "event": "subscribe", "pair": [ "XBT/USD","XBT/EUR" ], "subscription": { "name": "ticker" } }
时,服务器端可能发生什么?来源:https://www.kraken.com/features/websocket-api#message-subscribe - mbilyanov