如何实现服务器端推送,以便客户端不会错过来自服务器的任何推送?

时间:2011-01-10 01:05:58

标签: javascript client-server client-side server-side

我必须开发一个实时Web应用程序,服务器需要通过警报消息通知所有客户端是否有不良事件。

至关重要的是,客户不得错过任何警报,即使客户端暂时停机,如果再次联机,它必须收到任何已发送的警报。

任何想法如何实现这样的机制?客户端数量非常少(5-10),因此性能/带宽可能不是问题。

修改

完全错过了客户端必须(几乎)实时接收警报的要点,因此电子邮件可能不是最佳解决方案。

2 个答案:

答案 0 :(得分:4)

两种可能的方法:

  1. 让客户确认每个收到的提醒并跟踪服务器上每个客户的状态。
    • 带宽要求略高。
    • 哑客户端/智能服务器。
    • 更复杂的服务器。
    • 为服务器提供完全控制和监督。
    • 适合“真正的推动”(实时二进制流有点事),如果这就是你所拥有的。
  2. 时间戳或以其他方式唯一标识每个警报,让客户端告诉服务器最新的已知时间戳是什么,并让服务器制定适当的响应以使客户端保持最新状态。
    • RESTful方法。
    • 哑服务器/智能客户端。
    • 服务器不一定知道每个客户端的状态。
    • 连接丢失后轻松重新同步。
    • 更适合投票式架构。
  3. 在混合解决方案中,最佳可能介于两者之间。

答案 1 :(得分:1)

据我所知,你实际上无法推送到你的网络客户端。

假设您有一个客户端列表(在服务器上),那么每次有消息要发送时,请记录它需要读取数据库中每个客户端的事实。
使用一些JS编写您的客户端应用程序来轮询服务器,询问未读消息。显示未读消息,然后回写确认。

为此你需要

  • 包含所有客户端,所有消息和客户端消息状态矩阵(已读/已确认)的数据库。
  • 某种类型的网络服务a)获取给定客户的所有未读消息,b)确认给定客户的消息。
  • 客户端的Ajax类型用于轮询
  • 动态更改HTML以显示您收到的任何消息。
  • Ajax类型的东西让服务器知道你已经显示了消息,而不是再次为该客户端检索它们。