服务器发送的事件查询



我们有一个要求,服务器需要将数据推送到各种客户端。因此,我们继续进行SSE(服务器发送事件)。我浏览了文档,但仍然不清楚这个概念。我有以下疑问:

场景 1.假设有 10 个客户端。因此,所有 10 个客户端都将向服务器发送初始请求。已建立 10 个连接。当数据进入服务器时,消息从服务器推送到客户端。

  • 查询 1:服务器是否维护所有客户端的 IP 地址?如果是,是否有 API 来检查它?
  • 查询 2:如果所有 10 个客户端窗口都关闭,会发生什么情况?服务器是否会在一段时间后中止所有连接?
  • 查询 3:如果服务器由于客户端不可用(如计算机关闭)而无法向客户端发送消息,会发生什么情况。服务器是否会在一段时间后中止无法为其发送消息的客户端的所有连接?

请澄清一下?

这取决于您实现服务器的方式。

如果使用 PHP,作为 Apache 模块,则每个 SSE 连接都会创建一个在内存中运行的新 PHP 实例。每个"服务器"一次只为一个客户端提供服务。Q1:是的,但不是你的问题:你只是回显消息到stdout。Q2/Q3:如果客户端出于任何原因关闭连接,PHP 进程将在检测到此问题时关闭。

如果您使用的是多线程服务器,例如在node.js中使用http。Q1:客户端 IP 是套接字抽象的一部分,您只需将消息发送到 response 对象。Q2/Q3:当每个客户端连接关闭套接字时,处理它的请求进程将结束。一旦所有 10 个都关闭,您的服务器仍将运行,但不会向任何客户端发送数据。

使用 SSE 实现的一个关键思想是每个客户端都是一个专用套接字。它不是广播协议,在广播协议中,您推送一条消息,所有客户端都会收到完全相同的消息。相反,您必须将数据单独发送到每个客户端。但这也意味着您可以自由地向每个客户端发送自定义数据。

最新更新