jth*_*tht 1 port websocket node.js express
我正在使用 node.js 的 Express 框架制作一个应用程序,该框架通过 http 提供 html 内容,并使用 websockets 实现聊天功能。我想知道如何才能同时完成这两件事。我的想法是使用不同的端口进行 websocket 连接(因此 http 请求将到达端口 3000,而 websocket 将在端口 3001 上连接),但我不知道这是否是一个好的解决方案。我特别担心部署到像 heroku 这样的东西,以及我是否可以为我的应用程序指定不同的端口。
我想知道如何才能同时完成这两件事。
webSocket 协议经过专门设计,因此它可以在与常规 Web 服务器请求相同的端口上运行。因此,您不需要单独的端口即可使用 webSockets 运行 Web 服务器和聊天。
这是可行的,因为 webSocket 连接始终是通过设置一些特殊标头的 http 请求发起的。然后,接收 Web 服务器可以检测这些特殊标头,并知道此传入的 http 请求实际上是发起 webSocket 连接的请求。通过特定的响应,客户端和服务器同意“升级”连接并切换到 webSocket 协议。从那时起,该特定 TCP 连接将使用 webSocket 协议。
同时,任何没有特殊 webSocket 标头的传入 http 请求都会被 Web 服务器视为常规 http 请求。这样,同一个服务器和同一个端口就可以同时用于 webSocket 连接和常规 http 请求。不需要第二个端口。
此方案的另一个优点是,客户端可以避免在尝试使用与加载网页不同的端口时可能遇到的跨域问题。
我特别担心部署到像 heroku 这样的东西,以及我是否可以为我的应用程序指定不同的端口。
如果您实际上要使用两个端口,那么您需要创建两个单独的服务器,一个服务器监听每个端口,因为给定的服务器只能监听一个端口。在 Node.js 中,两个服务器可以位于同一个 Node.js 应用程序中(以便更轻松地在它们之间共享数据),或者您可以将它们放在完全独立的 Node.js 进程中(您的选择)。
而且,如果您使用多个端口,您还必须支持 CORS,以便允许浏览器连接到单独的端口(以避免同源限制)。
| 归档时间: |
|
| 查看次数: |
1901 次 |
| 最近记录: |