双向与单向通信

Bi-Directional Vs Uni-Directional communication

提问人:curiousengineer 提问时间:7/4/2023 更新时间:7/4/2023 访问量:82

问:

既然TCP连接在技术上是双向的,为什么我们说Http长轮询是单向的,而Web套接字是双向的呢?长轮询标准是如何实现的,那里有一些微妙的东西吗?对我来说,即使是 http 长轮询似乎也是双向的。我找不到任何具体的东西来引用适当的技术差异。只是模糊的博客引用,只有客户端才能在长轮询中向服务器发起请求。这没有多大意义,因为它含糊不清。一旦客户端连接到服务器,客户端和服务器就可以相互发送数据,即使在长时间轮询中也是如此。

套接字 websocket 长轮询

评论


答:

2赞 Jeremy Friesner 7/4/2023 #1

通过长轮询,建立 TCP/TLS 连接,然后客户端向服务器发送请求,然后连接保持打开状态,从那时起信息仅从服务器流向客户端。在长轮询中,客户端无法在初始请求之后向服务器发送任何其他信息(至少在服务器发回回复之前不会;之后,客户端可以发出另一个请求)

使用 WebSocket OTOH,通信是全双工的,即客户端和服务器都可以随时通过连接自由发送更多数据。

评论

0赞 curiousengineer 7/4/2023
谢谢,但从概念上讲,是什么阻止了客户端进行长时间轮询?这是关于如何在TCP套接字之上实现的东西?因为从技术上讲,在TCP中,双方都可以交谈
0赞 Jeremy Friesner 7/4/2023
据我了解,没有什么可以阻止长轮询客户端通过 TCP 连接单方面发送更多数据,但另一端的 HTTP 服务器(以及它们之间的任何中间代理)并不期望这种行为,因此不太可能以任何有用的方式处理它。