2

为不止一件事实现服务器推送的最佳方法是什么。

假设我只想更新用户状态,所以我可以在 1000 毫秒内定期轮询服务器的状态并更新页面。

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

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

向服务器询问每个问题的投票 -> 服务器回复页面上每个问题的投票

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

一个例子就是Facebook,几乎所有内容都通过服务器推送刷新,但服务器如何找出发生了哪些变化,哪些没有发生变化?

我发现的所有内容(包括我的“Ajax 模式”一书)只解释了如何轮询一个值,但我没有找到任何如何一次轮询多个值(比如超过 10 个)。

4

2 回答 2

2

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

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

JSON 客户端/服务器架构将非常适合这一点。它允许对象层次结构/映射的轻松序列化。我更喜欢 jQuery 的客户端在 javascript 中,而服务器端是微不足道的吐出来。

于 2009-06-08T22:35:24.347 回答
0

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

于 2009-06-08T18:59:13.783 回答