服务器推送事件查询

3
我们有一个需求,即服务器需要将数据推送到各个客户端。因此,我们采用了SSE(服务器发送事件)。我已经阅读了文档,但对概念仍不清楚。我有以下疑问:
场景1:假设有10个客户端。那么所有10个客户端都会向服务器发送初始请求。建立10个连接后,当数据进入服务器时,服务器会向客户端推送消息。
查询1:服务器会维护所有客户端的IP地址吗?如果是,是否有API来检查它?
查询2:如果所有10个客户端窗口都关闭,会发生什么?服务器会在一段时间后中止所有连接吗?
查询3:如果由于客户端不可用(例如机器关闭),服务器无法向客户端发送消息,会发生什么?服务器会在一段时间后中止所有连接,对于那些无法发送消息的客户端吗?
请说明。

如果您将它们分成单独的问题在StackOverflow上发布,可能会获得更多的回复。通常情况下,发布一个可管理的单一问题比发布许多可能涉及许多不同事物的问题更好。 - Trott
1个回答

0
这取决于你如何实现服务器。
如果使用PHP作为Apache模块,那么每个SSE连接都会在内存中创建一个新的PHP实例。每个“服务器”一次只为一个客户端提供服务。Q1:是的,但不是你的问题:你只需将消息输出到stdout。Q2 / Q3:如果客户端由于任何原因关闭连接,则PHP进程检测到后将关闭。
如果您正在使用多线程服务器,例如在node.js中使用http。Q1:客户端IP是套接字抽象的一部分,您只需将消息发送到response对象即可。Q2 / Q3:随着每个客户端连接关闭套接字,处理该连接的请求过程将结束。一旦所有10个连接关闭,您的服务器仍将运行,但不会向任何客户端发送数据。
一个关键的想法要认识到SSE是每个客户端都是一个专用套接字。这不是广播协议,在广播一条消息且所有客户端得到完全相同的消息。相反,您必须将数据单独发送给每个客户端。但这也意味着您可以自由地向每个客户端发送定制数据。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接