我有一个要求,我需要向客户发送持续更新。在这种情况下,客户端是浏览器我们有一些数据每秒都会更新,所以一旦客户端连接到我们的服务器,我们就会保持持久连接,并不断将数据推送到客户端。
我正在服务器端寻找此实现的建议。基本上我需要的是这个: 1.客户端连接到服务器。我维护有关套接字的套接字和元数据。元数据包含需要向此客户端发送的更新 2.服务器进程现在等待新的客户端连接 3.另一个进程将打开所有套接字的列表,并将遍历每个套接字并在需要时发送更新。
我们可以在Apache模块中做这样的事情: 1. Apache进程获取新连接。它维护连接的状态。它将状态保存在某个全局内存中并返回到根进程,以表示它已完成,以便它可以接受新连接 2. Apache进程虽然已将状态返回到root进程,但它也在并行执行,它通过其全局存储并向客户端发送更新(如果有)。
Apache进程也可以执行以下操作: 1.有多个与之关联的连接 2.异步等待新连接并同时处理先前的连接?
答案 0 :(得分:1)
这是一种复杂且无效的更新模型。您的服务器将尝试更新已关闭的客户端。并且服务器必须维护所有客户端数据和元数据(上次更新时间等)。
通常,对于连续更新,ajax用于轮询模型。客户端有一个javascript计时器,当它触发时,命中一个提供更新数据的服务。客户端定期继续获取更新,而无需编写apache模块。
此模型适用于您的方案吗?
More reasons to opt for poll instead of push
Periodic_Refresh
答案 1 :(得分:0)
With a little patch恢复SUSPENDED mpm_event连接,我有一个异步Apache模块工作。有了这个,您可以进行改进的轮询:
这样可以减少客户端和服务器之间的往返次数,并且客户端立即收到更新。 (这被称为Comet的反向Ajax,AFAIK)。