为不同的网站功能分离websocket应用程序,任何好处?

时间:2014-01-04 02:39:32

标签: websocket port server-side

所以我使用socket.io在我的websockets应用程序中建立了一个实时聊天室。

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

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

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

请注意:我不是只是在寻找意见,而只是分享过度集中的利弊的事实真相。

假设有任何利弊。缺少关于websocket框架的文档并没有真正详细说明这一特定方面。

2 个答案:

答案 0 :(得分:1)

WebSocket应用和端口

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

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

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

要实现此目的,您可以引入支持端口共享的WebSocket网关应用程序。然后,您的客户端可以为每个WebSocket服务命中端口80,但您可以为不同的应用程序使用不同的端口。

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

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

一般来说,为了在整个互联网上获得流量,最好使用端口80和443,如果可以的话,端口共享,以便在途中穿过任意数量的中间代理/防火墙。

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

就像应用程序服务器一样,没有理由为什么一个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担任服务器工程师。)

答案 1 :(得分:0)

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

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

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