javascript - 带有订阅的 Javascript WebSockets
问题描述
我一直在用 Javascript 探索 WebSockets,并且我已经掌握了一些基础知识,比如发送和接收数据。
然而,当我检查一些连接到 websockets 数据源的真实案例时,总是有这个subscribing
通过发送特定 JSON 对象来连接通道的概念。
这背后的机制是什么,服务器端处理此类订阅需要什么?订阅是一种发送和请求数据的奇特方式,还是这种方式还有更多?
解决方案
我觉得这是一个很大的问题,我可能无法提供一个全心全意的完整答案。但我会尝试——
首先,websocket 只不过是一个没有 socket close的标准 web 请求。因此,您维护的双向套接字上的输入/输出允许推送数据。
通过 websocket 发送内容的两种方法是 Binary 和 Text。因此,当您发送数据包时,您的另一端将收到一条消息。根据您的实现或库,您可能会收到一条完成的消息。
由于发送文本相当便宜且通常的用例是您希望发送结构化格式 - 例如传输语言 JSON。您的接收器(客户端)可以简单地JSON.parse(message)
完成工作。
当然,您可以发送任何格式的文本 - 例如,[my content:"my custom format"]
但这是您自己的实现。
最后,websocket 连接是非常基本的——没有这样的框架可以利用。回显或广播服务器是“对于任何传入消息,发送到所有连接的客户端”的示例。发布者/订阅者是另一个一般概念或“渠道”作为 websockety 术语。当用户连接到您的主服务器时,他们会提供一些凭据来进行身份验证和/或将自己标识为唯一实体。
TL:博士;
因此,“订阅”更像是一个允许用户连接并分配给消息流的概念。对于许多现成的库,这是免费赠品。这可以通过格式化的传输文本(例如 JSON)来完成。
在服务器上,您处理套接字并构建您自己的例程协议。这可以像带有 IDS 的套接字列表一样简单。
https://Pusher.com长期以来一直是 websocket 服务,他们提供了关于这个主题的一些很好的文档
https://pusher.com/docs/channels
但它总是只是格式化的文本或二进制流。您的服务器将处理任何复杂的逻辑。
希望能帮助到你。
推荐阅读
- r - Advanced R 中的惰性求值
- python - 启用 USB 网络共享后 Python uiautomator 崩溃
- python - 使用 Oracle 数据库循环遍历结果
- php - Laravel Nova 安装 - “nova”命名空间中没有定义命令
- json - 相同的函数返回不同的值,具体取决于是在控制台中创建还是从模块创建
- html - 是否可以仅使用 CSS 隐藏悬停的图像并显示另一个图像?
- html - CSS 突出显示活动选项卡
- python - 有人可以解释这个 python 代码的作用吗?
- jquery - 在odoo中滚动时更改导航菜单上的徽标
- php - Laravel 5.5 - 调用后台服务