对于高性能 websocket 服务器,理想情况下我想重新定向 Iron 来监听 websockets 而不是 http(s)。
是否可以将rust-websocket与iron一起使用,或者两者一起使用没有意义?
如果可能,我该如何实现?
对于高性能 websocket 服务器,理想情况下我想重新定向 Iron 来监听 websockets 而不是 http(s)。
是否可以将rust-websocket与iron一起使用,或者两者一起使用没有意义?
如果可能,我该如何实现?
既然你的目标是创建一个高性能的 websocket 服务器,那么从一个 HTTP 服务器开始,比如 Iron,可能没有意义。(Iron 基于Hyper,它标榜自己是“快速且正确的 HTTP 实现”)。我建议查看tokio,它被设计为“一个异步的、事件驱动的平台”,并被 Hyper 和 Iron 使用。
WebSockets 需要不同的协议来创建双向交互通信会话。来自Mozilla 文档:
您可以向服务器发送消息并接收事件驱动的响应,而无需轮询服务器以获取回复。
因此,如果您不需要 HTTP,那么从专注于请求/响应的服务器开始可能会带来更多的复杂性而不是好处。虽然Iron websocket 问题仍然存在,但最近的评论指出:
就我个人而言,我认为将 websocket 放入 Iron 的请求-中间件-响应模型中非常困难。我还没有看到其他语言的优雅抽象。
如果您真的想通过 Iron 探索使用 WebSockets,您需要扩展 hyper 以支持 WebSockets(这里很好的讨论),然后访问较低级别的超连接(在Iron 问题 #478中进行了解释)。建立连接后,WebSocket 库将很有用(尽管 rust-websocket 似乎不再维护)。
我正在考虑在一个项目中同时使用 Iron 和 rust-websocket,我所采用的架构包括让 websocket 在单独的端口上侦听。我可以在部署中使用 Nginx 在前端代理回特定端口来掩盖这一点
听起来您想将 Iron 内部的 Hyper 换成 rust-websocket。这很可能是困难的,如果它甚至可能的话。Iron 与 Hyper 高度集成,整个设计都是围绕 HTTP(S) 构建的。如果这真的是您想做的事情,可能值得与 Iron 开发人员联系,以了解允许通信接口可交换的可能性,但我不知道他们接受的可能性有多大这个想法。