Websockets 与反应式套接字
Posted
技术标签:
【中文标题】Websockets 与反应式套接字【英文标题】:Websockets vs Reactive sockets 【发布时间】:2017-12-09 13:47:33 【问题描述】:我最近遇到了一个术语“反应式套接字”。到目前为止,我一直认为 websockets 是实现完全成熟的异步风格的方式。
那么什么是反应式套接字。
这个链接 (http://rsocket.io/) 甚至谈到了 websockets 的比较。
【问题讨论】:
你能解释一下为什么这个问题被否决了吗? 【参考方案1】:什么是 RSocket?
RSocket 在网络边界上实现Reactive Streams 规范。它是一种应用程序级通信协议,具有内置的框架、会话恢复和背压功能,可在网络上运行。
RSocket 与传输无关。 RSocket 可以在 Websockets、TCP、HTTP/2 和 Aeron 上运行。
RSocket 与 Websockets 有何不同?
Websockets 不提供应用级背压,仅提供基于 TCP 的字节级背压。 Websockets 也只提供框架,它们不提供应用程序语义。由开发人员来构建与 websocket 交互的应用程序协议。
RSocket 提供框架、应用程序语义、应用程序级背压,并且它不依赖于特定的传输。
有关创建 RSocket 背后的动机的更多信息,请查看 RSocket 网站上的motivations doc。
【讨论】:
gregwhitaker 能否帮助理解什么是应用程序级背压和字节级背压?如果能举例说明就好了。 当然,字节级背压是接收者说“向我发送 x 个字节”的地方。应用程序级背压是接收者说“向我发送 x 个域或请求对象”的地方 动机链接不起作用。这是正确的:rsocket.io/about/motivations【参考方案2】:WebSocket 和 RSocket 都是具有双向、多路、双工通信的协议。但两者都在不同的层次上工作。
WebSocket 是一种基于 TCP 的底层通信协议。它定义了如何将字节流转换为帧。但是 WebSocket 消息本身并没有关于如何路由或处理它的说明。因此,我们需要在应用层的 websocket 之上运行的消息传递协议,以实现双向通信。
RSocket 是一个完全反应式的应用程序级协议,它运行在 TCP、WebSocket、UDP 等字节流传输上。它提供对网络的应用程序流控制,以防止中断并提高弹性。 RSocket 采用了具有非阻塞背压的异步流处理的思想,其中失败的组件将与其简单地丢弃流量,不如将其压力传达给上游组件,让它们减少负载。
【讨论】:
我希望我能给你多一点,因为这个解释真的很好以上是关于Websockets 与反应式套接字的主要内容,如果未能解决你的问题,请参考以下文章
EventMachine WebSockets - 订阅 WS 到 EM 频道与保持套接字收集
WebSockets Tutorial(教程一)————WebSockets简介
Flash 中的 WebSocket 与原始 TCP 套接字