作者:拾味湖 | 2023-07-15 13:03
我已经阅读了WebSockets,我想知道为什么浏览器不能简单地打开简单的TCP连接并像其他任何桌面应用程序一样与服务器通信.为什么通过websockets进行这种通信?
1> Ash..:
当您在Intranet边界内工作时,通过TCP套接字进行通信更容易,因为您可能可以控制该网络上的计算机并可以打开适合建立TCP连接的端口.
在互联网上,您正在与另一端的其他人的服务器进行通信.他们极不可能有任何旧的套接字打开连接.通常它们只有几个标准的端口,例如HTTP端口80或HTTPS端口443.因此,要与服务器通信,您必须使用其中一个端口进行连接.
鉴于这些是通常使用HTTP的Web服务器的标准端口,因此您必须遵守HTTP协议,否则服务器将不会与您通信.Web套接字的目的是允许您通过HTTP启动连接,但随后协商使用Web套接字协议(假设服务器能够这样做)以允许更像"TCP套接字"的通信流.
不可能有任何旧的套接字打开连接.通常它们只有几个标准的端口,例如HTTP端口80或HTTPS端口443.因此,要与服务器通信,您必须使用其中一个端口进行连接.
"在互联网上,你正在与另一端的其他人的服务器进行通信.""鉴于这些是通常使用HTTP的Web服务器的标准端口(80和443),因此您必须遵守HTTP协议,否则服务器不会和你说话." 通常,我们访问的websocket服务器将是我们自己的.因此,我们可以使用我们定义的协议来监听端口.那么,为什么我们需要HTTP握手和协议切换?相反,为什么我们不能直接遵循websocket协议?
@Pacerier:WebSocket需要某种传输协议才能进行操作,但传输层不必是TCP(尽管实际上它几乎总是TCP).您可以将WebSockets视为TCP的一种包装,但我不认为两者之间存在任何规定性联系.
谢谢你的简单解释,Ash.
通过RFC6455,WebSocket首先需要在HTTP中进行握手,然后协议升级到WebSocket.大多数浏览器都遵循这一点.如果您在服务器中使用任何协议,我不知道您的客户端(浏览器)将如何支持.这就像我们可以用法语交流,只有我们两个都懂法语.和握手就像,我问你,'我们能用法语交流吗?'用英语(这里是HTTP).浏览器(如chrome)知道法语,但我们必须教服务器法语.我的问题是为什么RFC6455(WebSocketProtocol)想要在HTTP中进行握手并使事情复杂化,为什么他们不能按照自己的方式去做?
2> wulfgarpro..:
Web浏览器在Application层运行,而TCP在Transport Layer运行.作为Web应用程序开发人员,通过应用程序层而不是传输层的原始字节通过线路发送消息更容易.
底层的WebSockets 是 TCP,它只是为了简单而抽象出来.