当我们想使用 Javascript 通过 WebSocket 进行通信时,套接字如何将端口从 HTTP 80 更改为另一个端口?

How does a socket change ports from HTTP 80 to another port when we want to communicate over WebSocket using Javascript?

假设我有一台服务器 XYZ,它在端口 50000 上侦听 TCP 客户端,在端口 80 上侦听 HTTP 客户端。另一方面,我有一个客户端使用 WebSocket 建立到端口 50000 的套接字连接,并将使用 HTTP 端口 80 进行握手(当然)。

现在,当客户端开始时,它会首先通过 HTTP 端口 80 向服务器 XYZ 发送请求,服务器将在端口 80 上接收其握手请求,并发送响应欢迎。所以,在那种情况下,双方都使用端口 80(当然)。

现在,当握手完成时,标准文档说用于 HTTP request/response 的相同 TCP 连接将被转换为 TCP 套接字连接。好的。

但是,但是如果整个握手过程和 HTTP request/response 的 TCP 连接第一次使用端口 80,并且相同的 TCP 连接转换为 TCP 套接字连接,那么整个过程就是通过端口 80 完成,那么同一个 TCP 连接如何转换为双方 TCP 套接字的端口 50000?客户端是否在内部初始化另一个 TCP 连接以更改到端口 50000?

那么,谁能说出端口转换是如何执行的,并且在 WebSocket 中从端口 80 到双方的不同端口是如何工作的?如何在不同端口上建立完整的单套接字连接?相同的 TCP 连接 change/flip 其端口如何?

TCP 套接字连接根本无法更改端口。建立连接后,其端口将被锁定且无法更改。如果您在端口 80 上有 TCP 套接字连接,则在端口 50000 上建立连接的唯一方法是建立一个完全独立的 TCP 套接字连接。

WebSocket 无法连接到端口 80 然后切换到端口 50000。但是,从端口 80 提供给浏览器的 HTML 页面可以包含客户端脚本,允许浏览器创建一个WebSocket 对象并将其连接到端口 50000。两个 TCP 连接(HTTP 和 WebSocket)彼此完全分开(事实上,一旦 HTML 被服务,HTTP 套接字连接甚至不需要保持打开状态,因为HTTP 是一种无状态协议。