【问题标题】:Does the server wait for a response from the client when using server sent events?使用服务器发送的事件时,服务器是否等待客户端的响应?
【发布时间】:2022-12-09 17:16:43
【问题描述】:

SSE 被宣传为从服务器到客户端使用的单向通信工具。我需要向所有客户端广播数据,所以我想知道 SSE 在低级别上的表现如何。我似乎无法在网上找到任何关于 SSE 的低级信息。

主要想知道发送数据后,服务器是否等待客户端的响应以确认它已收到数据,然后再完成“发送”。这意味着使用 for 循环进行广播将非常危险且缓慢,在这种情况下,websockets 可能是更好的选择。

也许实现完全取决于语言和框架?不规范吗?

【问题讨论】:

    标签: server-sent-events


    【解决方案1】:

    广播通常使用不等待响应的 UDP。 - - Broadcasting ip:port by socket server .. 说

    UDP 数据包:前四个字节是一个幻数,接下来的四个字节是 IPv4 地址(您可能还想添加其他内容,例如服务器名称)。

    幻数只是为了防止与使用同一端口的另一个应用程序发生冲突。检查数据包的长度和幻数。

    服务器将以大约 30 秒的时间间隔广播数据包。 (或者,您可以让服务器仅在客户端通过广播发送请求时发送响应。)

    因此,客户端应用程序必须将请求发送回服务器应用程序。

    不同的协议会根据底层技术得到不同的响应。例如,HTTP 广泛使用响应。

    【讨论】:

    • 啊,我知道我只是使用了错误的术语。广播是一个仅适用于 UDP 的概念,因为它不等待响应,并且由于 http 是建立在 TCP 上的,因此没有广播的概念,事实上我怀疑 SSE 和 websockets 都会遇到同样的问题,即必须等待一个客户端在发送另一个之前完成,因此这个问题是并行异步 IO 问题。谢谢你的澄清。
    【解决方案2】:

    SSE 和 WebSockets 都基于 TCP,因此在使用套接字发送更多数据之前可能需要等待。

    但是,每个客户端都是一个专用套接字。所以服务器端你会使用线程或异步编码(取决于服务器端语言及其约定)。因此,循环遍历所有套接字以向每个客户端发送消息会很好而且很快。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-02
      • 1970-01-01
      • 1970-01-01
      • 2015-05-06
      相关资源
      最近更新 更多