【问题标题】:How to implement a server side push so that the client doesn't miss any pushs froms the server?如何实现服务器端推送,以便客户端不会错过来自服务器的任何推送?
【发布时间】:2011-01-10 01:05:58
【问题描述】:

我必须开发一个实时 Web 应用程序,如果发生了不好的事情,服务器需要通过警报消息通知其所有客户端。

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

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

编辑

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

【问题讨论】:

  • 为什么你刚才问的问题重复了?stackoverflow.com/questions/4642857/…
  • 我认为将“不可错过”的内容提取到一个单独的问题中是个好主意。
  • 第一个满足您第二个要求的系统是电子邮件 - 如果您可以足够频繁地轮询它...
  • 您必须实现一个确认系统,在该系统中,服务器会不断向客户端发送信息,直到它收到来自客户端的肯定接收确认。

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


【解决方案1】:

两种可能的方法:

  1. 让客户端确认收到的每个警报并跟踪服务器上每个客户端的状态。
    • 带宽要求稍高。
    • 哑客户端/智能服务器。
    • 更复杂的服务器。
    • 为服务器提供完全控制和监督。
    • 适用于“真正的推送”(有点像实时二进制流),如果这就是您所拥有的。
  2. 时间戳或以其他方式唯一标识每个警报,让客户端告诉服务器最新的已知时间戳是什么,并让服务器制定适当的响应以使客户端保持最新状态。
    • RESTful 方法。
    • 哑服务器/智能客户端。
    • 服务器不一定知道每个客户端的状态。
    • 连接中断后易于重新同步。
    • 更适合轮询型架构。

最佳值可能介于混合解决方案之间。

【讨论】:

    【解决方案2】:

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

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

    为此你需要

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

    【讨论】:

      猜你喜欢
      • 2011-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-11
      • 1970-01-01
      • 1970-01-01
      • 2019-11-12
      • 1970-01-01
      相关资源
      最近更新 更多