Kon*_*rad 3 http server-sent-events
https://developer.mozilla.org/en-US/docs/Web/API/EventSource
EventSource 接口是 Web 内容与服务器发送的事件的接口。EventSource 实例打开与 HTTP 服务器的持久连接,该服务器以文本/事件流格式发送事件。连接保持打开状态,直到通过调用 EventSource.close() 关闭为止。
据我了解,服务器发送的事件需要持久的 HTTP 连接(Connection: keep-alive),这与保持连接处于活动状态类似,就像 Web 套接字一样。
如果连接是持久的,为什么服务器发送的事件是单向的?Web 套接字连接也是持久的。
在这种情况下,如果我向 HTTP 服务发送请求并且由于EventSource. 它会重新使用打开的 HTTP 连接EventSource还是打开一个新连接?
如果它重新使用打开的连接,EventSource它如何被认为是单向的?
可能是微不足道的,但我不得不问,因为它不清楚。因为没有提及当存在由 . 打开的现有连接时后续 HTTP 请求会发生什么EventSource。
例如,我认为可以使用 SSE 实现集中式聊天应用程序:
用户 1 向用户 2 发送消息(通过将其发送到 HTTP 服务器)。服务器使用新消息向用户 2 发送事件,用户 2 使用用户 1 的消息向 HTTP 服务器发送另一个请求,服务器向用户 1 发送事件。
这怎么不被认为是双向的?
有关的:
SSE 是单向的,因为当打开 SSE 连接时,只有服务器可以向客户端(浏览器等)发送数据。客户端无法发送任何数据。SSE 比 WebSockets 更老一些,因此这两种技术之间的单向和双向支持可能有所不同。
\n\n在您的用例中,如果您打开 SSE 连接(这是 HTTP 连接),则只有服务器能够发送数据。如果您希望向 HTTP\xc2\xa0service 发送请求,则需要打开一个新的“经典”HTTP 连接。您将看到浏览器打开两个 HTTP 连接:\xc2\xa01 用于 SSE\xc2\xa0 连接,1 个用于经典 HTTP\xc2\xa0 请求(短暂)。
\n\n您可以与SSE实现聊天。您可以使用 SSE 连接(即 HTTP)来让用户接收来自服务器的消息。您可以使用 POST HTTP\xc2\xa0requests 使用户能够发送他/她的消息。
\n\n请注意,大多数浏览器可以打开到同一主机的大约 6 个 HTTP/1.x 连接。因此,如果您使用 1 个 SSE 连接,则可能会保留 5 个 HTTP/1.x 连接。仅适用于 HTTP/1.x。使用 HTTP 2.x,到同一主机的连接是多路复用的:因此,理论上,您可以根据需要同时发送任意数量的 HTTP 请求,或者可以根据需要打开任意数量的 SSE 连接,因此,通过6 个连接的限制。
\n\n您可以查看这篇文章(https://streamdata.io/blog/push-sse-vs-websockets/)和这个视频(https://www.youtube.com/watch?v=NDDp7BiSad4)来获取关于这项技术以及它是否可以满足您的需求的见解。他们总结了 SSE 和 WebSocket 的优缺点。
\n| 归档时间: |
|
| 查看次数: |
2281 次 |
| 最近记录: |