服务器发送的事件查询

时间:2014-04-08 09:53:30

标签: server-sent-events

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

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

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

请澄清一下?

1 个答案:

答案 0 :(得分:0)

这取决于您如何实施服务器。

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

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

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