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 担任服务器工程师)。