我正在编写一个远程服务器来控制机器人。 机器人提供视频及其当前传感器状态;服务器发送控制命令。
我在机器人和服务器(2 路)之间发送帧和控制/传感器状态的选择是 ZeroMQ 和 WebSockets。
我需要:
我的编码伙伴想要使用 Websockets,因为它正在进行标准化,但我有 3 个月使用 ZMQ 来完成我们想做的事情的经验,所以我相当确定选择并不重要。
但是,我想知道是否有人能想到一个令人信服的理由来选择一个或另一个(XOR)。 我们不会使用 ZMQ+Websockets,因为我们不需要。
看看 WebSocket 是什么,老实说,我认为它不会有太大区别。它们只是一种在同一 TCP 连接上在 HTTP 协议和 WebSocket 框架消息协议之间进行切换的方法。 ZMQ 也为您提供框架消息,但您将通过与 Web 浏览器的 HTTP 连接分开的网络连接来使用它。
延迟比较将取决于 Web 浏览器提供的运行时环境的好坏。在我看来,WebSockets 的使用将涉及用 Javascript 编写客户端代码并在浏览器中运行该代码(“现代”方式),因此该代码将受 Web 浏览器的 Javascript 引擎的支配(它们非常漂亮)。我认为很好)。
使用 ZMQ,您可能必须为客户端编写一个本机应用程序(我不知道它是否可以在 Javascript 的 Web 浏览器中使用 - 我需要一些教育!)。本机应用程序不受网络浏览器的任何影响,因此可能会好一点。
但是,如果您的实时要求仅在人类规模上(即它只需要足够快的响应以使人类高兴),我认为任何一个都可能足够了。两者都无法克服互联网上的传播时间,也无法解决操作系统/浏览器延迟。
一个区别是,使用 WebSocket 时,您似乎必须在 HTTP 和 WebSocket 协议之间切换。因此,如果您需要切换回 HTTP 来加载某些 Web 元素或其他元素,这将中断 WebSocket 数据流,直到您再次切换回来。这是否实际上是一个问题很大程度上取决于您的客户端应用程序正在做什么(例如,您很可能正在与一个单独的 Web 服务器对话以获取网页元素,在这种情况下,您将有两个无论如何,随时随地连接)。
使用 ZMQ,您将拥有专用连接。