代码之家  ›  专栏  ›  技术社区  ›  Konrad

SSE(服务器发送事件)是单向的原因和方式

  •  0
  • Konrad  · 技术社区  · 6 年前

    https://developer.mozilla.org/en-US/docs/Web/API/EventSource

    据我所知,服务器发送事件需要 persistent HTTP connection ( Connection: keep-alive )

    如果连接是持久的,为什么服务器发送的事件是单向的?Web套接字连接也是持久的。

    在这种情况下,如果我向我的HTTP服务发送一个请求,并且由于以下原因打开了持久连接,会发生什么 EventSource . 它会重新使用由打开的HTTP连接吗 事件源 或者打开一个新的连接?

    如果它重新使用 事件源 它如何被认为是单向的?

    可能很琐碎,但我不得不问,因为它不清楚。因为没有提到当现有的连接被打开时,后续的HTTP请求会发生什么 事件源

    例如,在我看来,使用SSE实现集中式聊天应用程序是可能的:

    用户1向用户2发送消息(通过发送到HTTP服务器)。服务器向用户2发送带有新消息的事件,用户2向HTTP服务器发送带有用户1消息的另一个请求,服务器向用户1发送事件。

    这怎么不被认为是双向的呢?

    相关:

    What's the behavioral difference between HTTP Stay-Alive and Websockets?

    1 回复  |  直到 6 年前
        1
  •  2
  •   ctranxuan    6 年前

    在您的用例中,如果您打开一个SSE连接(这是一个HTTP连接),那么只有服务器能够发送数据。如果希望向HTTPservice发送请求,则需要打开一个新的“经典”HTTP连接。您将看到浏览器打开两个HTTP connections:1 for SSEconnection和1代表经典的HTTPrequest(short-live)。

    您可以实现与SSE的聊天。您可以使用SSE连接(因此是HTTP)让用户从服务器接收消息。您可以使用POST-HTTPrequests让用户能够发送他/她的消息。

    请注意,大多数浏览器可以打开到同一主机的大约6个HTTP/1.x连接。因此,如果您使用1个SSE连接,它将可能保持5个HTTP/1.x连接。这只适用于HTTP/1.x。使用HTTP2.x,到同一主机的连接是多路复用的:所以, ,您可以在同一时间发送任意多个HTTP请求,也可以根据需要打开任意多个SSE连接,从而通过6个连接的限制。

    https://streamdata.io/blog/push-sse-vs-websockets/ https://www.youtube.com/watch?v=NDDp7BiSad4 )了解这项技术以及它是否能满足您的需求。它们总结了优点和缺点;SSE和WebSocket的缺点。