【问题标题】:Using rust-websocket with Iron将 rust-websocket 与 Iron 一起使用
【发布时间】:2015-06-18 06:14:54
【问题描述】:

对于高性能 websocket 服务器,理想情况下,我想重新定向 Iron 以侦听 websockets 而不是 http(s)。

是否可以将rust-websocketiron 一起使用,或者两者一起使用没有意义?

如果可以,我该如何实现?

【问题讨论】:

  • 乍一看,您的问题似乎非常广泛(尽管可能只是我对该主题的了解不够)。您是否尝试过任何可以作为更全面解决方案的垫脚石的方法,将答案引向您感兴趣的方向?
  • 嗯,事实是我需要写一个高性能的websocket服务器,但是我之前尝试过的rust iron没有提供这样的功能,所以我看了一下rust-websocket。但我怀疑它的性能,所以我考虑过同时使用它们。
  • 您想以哪种方式同时使用两者?您想将 Iron 用于网站,rust-websocket 仅用于 websockets 部分吗?
  • 不,只是一个 websocket 服务器。理想情况下,我想重新定向 Iron 来监听 websockets 而不是 http(s)。

标签: websocket rust iron


【解决方案1】:

既然你的目标是创建一个高性能的 websocket 服务器,那么从一个 HTTP 服务器开始,比如 Iron,可能没有意义。 (Iron 基于Hyper,它宣称自己是“快速且正确的 HTTP 实现”)。我建议查看tokio,它被设计为“异步的、事件驱动的平台”,供 Hyper 和 Iron 使用。

WebSockets 需要不同的协议来创建双向交互通信会话。来自Mozilla docs

您可以向服务器发送消息并接收事件驱动的响应,而无需轮询服务器以获取回复。

因此,如果您不需要 HTTP,那么从专注于请求/响应的服务器开始可能会带来更多的复杂性而不是好处。虽然iron websocket issue 仍处于打开状态,但recent comment 注释:

我个人认为将 websocket 融入 Iron 的 request-middleware-response 模型非常困难。我还没有看到其他语言的优雅抽象。

如果您真的想通过 Iron 探索使用 WebSockets,您需要扩展 hyper 以支持 WebSockets (good discussion here),然后访问较低级别的超连接(在 iron issue #478 中解释)。建立连接后,WebSocket 库将很有用(尽管 rust-websocket 似乎不再维护)。

【讨论】:

    【解决方案2】:

    听起来您想将 Iron 内部的 Hyper 换成 rust-websocket。这很可能是困难的,如果它甚至可能的话。 Iron 与 Hyper 高度集成,整个设计都是围绕 HTTP(S) 构建的。如果这真的是您想做的事情,可能值得与 Iron 开发人员联系,以了解允许通信接口可交换的可能性,但我不知道他们接受的可能性有多大这个想法。

    【讨论】:

      【解决方案3】:

      我正在考虑在一个项目中同时使用 Iron 和 rust-websocket,我所采用的架构包括让 websocket 在单独的端口上侦听。我可以在部署中使用 Nginx 在前端代理回特定端口来屏蔽它

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-09-16
        • 2016-06-09
        • 1970-01-01
        • 1970-01-01
        • 2017-03-15
        • 2014-10-29
        • 2014-10-31
        相关资源
        最近更新 更多