我读过尚,我想知道为什么浏览器不能像任何其他桌面应用程序一样简单地打开微不足道的TCP连接并与服务器通信。为什么这种通信可以通过websocket实现呢?
当您在内部网边界内工作时,通过TCP套接字进行通信更容易,因为您可能可以控制该网络上的计算机,并可以打开适合进行TCP连接的端口。
在互联网上,您正在与另一端的其他人的服务器通信。它们极不太可能为连接打开任何旧套接字。通常它们只有几个标准端口,例如用于HTTP的端口80或用于HTTPS的端口443。因此,要与服务器通信,您必须使用这些端口之一进行连接。
考虑到这些是通常使用HTTP的web服务器的标准端口,因此您必须遵守HTTP协议,否则服务器将不会与您通信。web套接字的目的是允许您通过HTTP发起连接,但随后协商使用web套接字协议(假设服务器能够这样做),以允许更类似于“TCP套接字”的通信流。
Web浏览器运行在应用层,而TCP运行在传输层。作为web应用程序开发人员,通过应用层发送消息比在传输层发送原始字节更容易。
底层WebSockets 是 TCP,它只是为了简单而抽象掉了。
Websocket是应用层协议,而TCP是传输层协议。在传输层,我们通常有TCP和UDP协议。任何来自应用层的消息都需要经过传输层才能传输到其他机器。因此,websocket和tcp之间是有关系的,是不可比较的。
为了简单起见,websocket通信是通过TCP端口号80完成的(在tls加密连接的情况下是443),这对于那些使用防火墙阻止非web Internet连接的环境是有益的。
您想使用现有的TCP端口还是打开一个可能被防火墙阻塞的新TCP端口?