如何一次实现服务器推送更多值?

时间:2009-06-08 18:49:32

标签: php javascript jquery server-push

实现多个服务器推送的最佳方法是什么。

假设我想只更新用户状态,因此我可以定期轮询服务器状态,如1000ms并更新页面。

我能找到的另一种方式是服务器等待30秒,同时检查是否有任何更改,如果找到,服务器将响应返回给客户端,更新页面再进行另一次轮询。

但是我如何实现这个来检查网站上的10件事呢?例如,如果我希望stackoverflow在有人投票时刷新问题投票,但我能想到的唯一方法是如何做到这一点

  

要求服务器为每个问题投票 - >服务器回复页面上每个问题的投票

但我如何才能找出哪些问题的选票确实改变了?我可以发送所有当前的投票,然后让服务器比较这些值,只回复那些做出改变的投票,但我认为在检查30个值时这样做是非常无效的。

所有人的一个例子是 Facebook ,几乎所有东西都被服务器推送刷新,但是服务器如何找出改变的内容和什么没有?

我发现的所有东西(包括我的书“Ajax Patterns”)只解释了如何轮询一个值,但我没有找到任何方法如何一次轮询多个值(如超过10个)。

2 个答案:

答案 0 :(得分:2)

如果您准备使用会话,最简单的方法是拥有一个串行请求ID,并让服务器跟踪发送到会话客户端的最新信息。然后客户端询问是否有比上次更新数据更新的数据。

例如:假设客户端在没有任何更改后发送ajax请求#5001,服务器可能会回复“false”。然后有人发布消息,或者有某种类型的更改,因此在请求#5002中,服务器发送已更改元素的列表(无论这些是什么)。然后在请求#5003中它将再次回复false,因为自请求#5002以来没有任何改变。

JSON客户端/服务器架构非常适合这种情况。它允许轻松序列化对象层次结构/映射。我更喜欢javascript中的jQuery客户端,服务器端很容易吐出来。

答案 1 :(得分:0)

我建议在服务器端使用修订号标记您的数据,以便客户端知道它具有哪些数据修订版;创建一个复合查询,客户端可以发送一组修订,服务器可以使用它可能具有的任何更新修订来响应该修订列表。通过这种方式,客户端只进行一次服务器查询以查看是否有任何更新;您只需将客户感兴趣的所有数据合并到一个查询中。此方法还具有允许客户端更改其感兴趣的数据集的强度;如果您的实现服务器端足够灵活,您可以使用相同的实现来满足您的所有动态数据需求。