【发布时间】:2022-12-09 17:16:43
【问题描述】:
SSE 被宣传为从服务器到客户端使用的单向通信工具。我需要向所有客户端广播数据,所以我想知道 SSE 在低级别上的表现如何。我似乎无法在网上找到任何关于 SSE 的低级信息。
主要想知道发送数据后,服务器是否等待客户端的响应以确认它已收到数据,然后再完成“发送”。这意味着使用 for 循环进行广播将非常危险且缓慢,在这种情况下,websockets 可能是更好的选择。
也许实现完全取决于语言和框架?不规范吗?
【问题讨论】:
SSE 被宣传为从服务器到客户端使用的单向通信工具。我需要向所有客户端广播数据,所以我想知道 SSE 在低级别上的表现如何。我似乎无法在网上找到任何关于 SSE 的低级信息。
主要想知道发送数据后,服务器是否等待客户端的响应以确认它已收到数据,然后再完成“发送”。这意味着使用 for 循环进行广播将非常危险且缓慢,在这种情况下,websockets 可能是更好的选择。
也许实现完全取决于语言和框架?不规范吗?
【问题讨论】:
广播通常使用不等待响应的 UDP。 - - Broadcasting ip:port by socket server .. 说
UDP 数据包:前四个字节是一个幻数,接下来的四个字节是 IPv4 地址(您可能还想添加其他内容,例如服务器名称)。
幻数只是为了防止与使用同一端口的另一个应用程序发生冲突。检查数据包的长度和幻数。
服务器将以大约 30 秒的时间间隔广播数据包。 (或者,您可以让服务器仅在客户端通过广播发送请求时发送响应。)
因此,客户端应用程序必须将请求发送回服务器应用程序。
不同的协议会根据底层技术得到不同的响应。例如,HTTP 广泛使用响应。
【讨论】:
SSE 和 WebSockets 都基于 TCP,因此在使用套接字发送更多数据之前可能需要等待。
但是,每个客户端都是一个专用套接字。所以服务器端你会使用线程或异步编码(取决于服务器端语言及其约定)。因此,循环遍历所有套接字以向每个客户端发送消息会很好而且很快。
【讨论】: