我读过WebSockets,我想知道为什么浏览器不能像任何其他桌面应用程序一样简单地打开简单的 TCP 连接并与服务器通信。为什么可以通过 websockets 进行这种通信?
4 回答
当您在 Intranet 边界内工作时,通过 TCP 套接字进行通信会更容易,因为您可能可以控制该网络上的机器并且可以打开适合进行 TCP 连接的端口。
通过互联网,您正在与另一端的其他服务器进行通信。他们极不可能打开任何旧套接字以进行连接。通常它们只有少数标准端口,例如用于 HTTP 的端口 80 或用于 HTTPS 的 443。因此,要与服务器通信,您必须使用这些端口之一进行连接。
鉴于这些是通常使用 HTTP 的 Web 服务器的标准端口,因此您必须遵守 HTTP 协议,否则服务器不会与您通信。Web 套接字的目的是允许您通过 HTTP 发起连接,然后协商使用 Web 套接字协议(假设服务器能够这样做)以允许更像“TCP 套接字”的通信流。
Web 浏览器在应用层运行,而 TCP 在传输层运行。作为 Web 应用程序开发人员,通过应用程序层而不是传输层的原始字节通过线路发送消息更容易。
底层的 WebSockets是TCP,为了简单起见,它只是被抽象出来了。
为简单起见,websocket 通信通过 TCP 端口号 80(或 TLS 加密连接的 443)完成,这对于那些使用防火墙阻止非 Web Internet 连接的环境很有用。
您想使用现有的 TCP 端口还是打开可能被防火墙阻止的新 TCP 端口?
Websocket 是应用层协议,而 TCP 是传输层协议。在传输层,我们通常有 TCP 和 UDP 协议。来自应用层的任何消息都需要经过传输层才能传输到其他机器。因此,websocket 和 tcp 是有关系的,不能相提并论。