我有一个关于互联网上这三种数据传输协议的问题。我知道TCP/IP 套接字是一种低级通信形式,它使用传输层来执行数据传输并且处理得很好。
但是WebSockets和HTTP Request,我知道它们是建立在应用程序层上的,从我看到的例子中,它们的形式非常相似。
我是对的?WebSockets 是对 HTTP 请求的增强还是它们是同一个东西?在什么情况下使用 WebSockets 比使用 HTTP 请求更好?
我有一个关于互联网上这三种数据传输协议的问题。我知道TCP/IP 套接字是一种低级通信形式,它使用传输层来执行数据传输并且处理得很好。
但是WebSockets和HTTP Request,我知道它们是建立在应用程序层上的,从我看到的例子中,它们的形式非常相似。
我是对的?WebSockets 是对 HTTP 请求的增强还是它们是同一个东西?在什么情况下使用 WebSockets 比使用 HTTP 请求更好?
简单地说:TCP 套接字是非常底层的连接。您可以将其视为两台计算机之间的物理连接。当您建立 TCP 套接字时,您可以同步或异步发送和接收数据,具体取决于您从那时起使用的协议。
HTTP 是一种基于 TCP 的同步协议。HTTP 请求通过 TCP 套接字发出(并且响应通过同一个套接字传播)。
Web Sockets 是一种通过 HTTP 传输的协议。Web 套接字连接是通过 TCP 套接字建立的,最初使用 HTTP 协议。
TCP/ IP套接字使客户端-服务器架构成为可能,尽管它们不限于此。它们实际上涉及各种通信,因为它们是计算机之间传递数据包的机制。
因此,有了 IP 地址和端口,您仍然可以选择要使用的传输协议。传输协议可以是属于传输层或第 4 层的任何协议。TCP 位于该层,IP 协议位于第 3 层1。如您所见,所有这些都处于非常低的级别,因为 HTTP 位于第 7 层,即应用程序层,远高于套接字。
基本上,您无法将 HTTP 请求与套接字进行比较,因为前者是后者的特化。
至于HTTP和Websocket请求,都可以使用 HTTP 协议进行,但它们是不同的协议2。
选择它的原因之一是因为代理通常会阻止未在端口 80 上传输的任何内容,该端口是 HTTP 使用的默认端口。当客户端(通常是浏览器)检测到有代理时,它使用 HTTP CONNECT 方法创建持久连接,否则使用
ws://
或wss://
连接到服务器。ws://
与和的连接分别在端口 80 和 443 上建立,与和wss://
完全相同的端口http://
https://
Websockets 是必要的,因为 http 协议从一开始就被设计为不保留请求之间的状态(它是无状态的)。这是什么意思?当您向服务器发出请求并立即发送另一个请求时,它无法意识到两者是相关的。Cookies、javascript 和 code 通常在服务器上使用,以便它了解哪些信息是相关的,但 http 协议本身与它无关。它只是规定每个请求都是自给自足的,以便服务器可以响应它,只识别每个“请求/响应”对。这是该协议的最强点之一,因为它允许创建多种形式的客户端-服务器通信,例如REST和SOAP 。彼此非常不同。
某些类型的通信(例如聊天)要求源始终相同,并且可以知道例如连接是否丢失或其状态是否更改。看协议之前的条件,实现起来有点复杂(虽然不是不可能),因此需要像 websockets 这样的协议能够在两方之间建立稳定的通信隧道。请记住,为了建立通信,双方都必须支持 websockets,因此如果不支持 websocket,今天的大多数框架都允许 HTTP 请求回退。
用 HTTP 请求替换 websocket 的一些方法包括
服务器发送事件:基本上是一个未完成的 http 请求,双方都在其中发送信息(因为响应部分仅在连接关闭时结束)。
长池化:定期发送请求/响应的技术,以便双方更新连接状态并将消息传递给对方。如果其中一方停止响应,则认为连接丢失。
Comet:一组允许使用 PUSH 技术和其他 http 技术保持稳定连接的技术。
另请阅读什么是长轮询 websockets 服务器发送事件 sse 和彗星
一些实现 websocket 的框架:
注意:网络协议的形式可以如此多样化,以至于发明了信鸽上的 IP ,它在rfc2549中定义:P