【问题标题】:Separating websocket apps for different website features, any benefits?为不同的网站功能分离 websocket 应用程序,有什么好处吗?
【发布时间】:2014-01-04 02:39:31
【问题描述】:

所以我一直在使用我的 websockets 应用程序创建一个实时聊天室,使用 socket.io

但我还有一个需要实时的辅助功能,即 unrelated 到我的实时聊天功能。所以我想知道我应该在不同的端口上运行一个单独的应用程序吗?

这是否在性能和可扩展性方面提供任何技术优势?或者一个网站应该使用一个处理所有网络套接字数据的应用程序。

我不是服务器方面的专家,所以我想知道在技术方面是否有正确的方法。

请注意:我不是在寻找意见,而是关于分离而不是集中的利弊的事实真相。

假设有任何优点和缺点。许多 websocket 框架缺乏文档并没有真正详细介绍这一特定方面。

【问题讨论】:

    标签: websocket port server-side


    【解决方案1】:

    WebSocket 应用程序和端口

    问:所以我想知道我应该在不同的端口上运行一个单独的应用程序吗?

    简短的回答是肯定的,因为不相关的服务可能期望不同的增长模式,因此您希望尽可能多地分离功能,以便可以在不同端口上的同一机器上部署一项或多项服务。

    更长的答案是您应该这样做以在内部分离事物,但如果您可以让您的客户端通过端口 80 或 443 访问您的所有服务,那肯定会很棒 - 使用 WebSockets,您可以使用 WebSocket URL 来区分服务并共享同一个端口。

    为此,您可以引入支持端口共享的 WebSocket 网关应用程序。然后,您的客户端可以为每个 WebSocket 服务访问端口 80,但是您为单独的应用程序使用不同的端口。

    如果您的 WebSocket 网关应用程序支持 WebSocket 的端口共享,则意味着您的服务器接受具有不同路径的同一端口...例如

        ws://example.com:80/chat_service
        ws://example.com:80/unrelated_service
    

    一般来说,要通过整个 Internet 获取流量,最好使用端口 80 和 443,如果可以的话,端口共享,沿途穿透任意数量的中间代理/防火墙。

    问:这是否在性能和可扩展性方面提供任何技术优势?还是一个网站应该使用一个处理所有网络套接字数据的应用程序?

    就像应用服务器一样,一个 WebSocket 服务器没有理由不服务于多个不同的 Web 应用程序。如果您预计应用程序将经历不同的增长率,您应该将它们分成单独的 Web 应用程序,共享库。

    为了提高性能,如果您的应用程序通过 WebSocket 向客户端推送大量数据,您可能需要考虑所有服务的总网络接口流量,以确保您不会最大化网卡的带宽。这与您单独的端口问题无关。

    对于可扩展性,如果功能不相关,则将其保持独立并在必要时共享库将更具可扩展性。这是因为您可能会遇到不相关服务的不同增长水平。

    总结

    我建议保持客户端简单和服务器可扩展的组合如下:

    • 使用可以端口共享的 WebSocket 网关。所有客户端都可以使用带有单独路径的 80 或 443。

    • 将 WebSocket 网关配置为代理通过不同端口上的不同应用程序,以允许服务器独立扩展。

                                                           +----------+  
                                                    +------| App:Chat |  
      +--------+                   +---------+      |      +----------+  
      | Client |-----internet------| gateway |------+      (port 8081)  
      +--------+                   +---------+      |        
                                     (port80)       |      +----------+  
                                                    +------| App:App2 |  
                                                           +----------+  
                                                           (port 8082)  
      

    Kaazing WebSocket gateway 之类的网关解决方案提供此类功能,并且一次最多可免费供开发使用 50 个连接。

    (免责声明:我曾在 Kaazing 担任服务器工程师)。

    【讨论】:

      【解决方案2】:

      我没有给你一个明确的答案,但有两件事可能会有所帮助

      1) O'Reilly 有一本很棒的关于浏览器网络的书,您实际上可以免费在线阅读该书,以了解我们所知道的互联网系列电子管的实际工作原理。这是关于 WebSockets 的章节(在本书的后半部分)http://chimera.labs.oreilly.com/books/1230000000545/ch17.html。我刚刚浏览了一下,发现了一段关于多路复用的段落,似乎与您的研究相关。

      2) 想到为什么您可能希望拥有单独的连接的一个原因是它们充当 FIFO 队列,因此如果您的第二个用例涉及大量有效负载,则聊天会话在有效负载传输时基本上会挂起。当然还有其他原因可以选择这样或那样,希望其他人可以给你一个更完整的答案。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-09-09
        • 1970-01-01
        • 2014-06-19
        • 2011-03-30
        • 2010-11-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多