【问题标题】:Data Streaming on the Web网络上的数据流
【发布时间】:2011-04-30 23:29:12
【问题描述】:

背景

因此,如果您访问https://foursquare.com/,并查看标题“最近活动”下,您将看到来自世界各地 Foursquare 各个成员的不断更新的更新列表。

新的更新滑到堆栈的顶部,最旧的更新滑落(可能使用 JQuery 或其他东西,但这不是我的问题)。

Stack Overflow 的另一位成员告诉我,这实际上或多或少是一个伪新闻提要。当您加载页面时,它会调用数据库并获取 30 条最新记录,然后最初在页面上显示 30 条中最旧的 11 条,然后设置超时以滑出最旧的/最新的幻灯片.但是,它只是不断地循环遍历这 30 条记录(如果您将自己留在页面上而没有刷新或任何其他操作,您会注意到这一点)。它不会进行任何其他 AJAX 调用以从服务器获取新消息。这仅在页面加载时发生。

问题

  1. 他们这样做有什么原因吗?
  2. 我想设置我的,这样我就可以在页面加载时抓取一组记录,并显示它们(类似于 Foursquare),但是,我想(在我循环浏览这些记录之后)我带入 DOM),然后进行另一个 AJAX 调用以查看是否有任何更新,并将这些新的无缝集成到同一流程中。基本上,将其视为 Twitter 和 Foursquare 之间的混搭。 Twitter 让您知道何时有新消息,并让您可以选择将它们弹出到您的提要之上,而 Foursquare 只是在页面刷新时将新消息带入,仅此而已。有什么方法可以开始思考这个问题(在效率、架构等方面)?

如果有任何理由我不应该这样做,我也愿意听。

目前已完成

到目前为止,我有 SQL Server 存储过程,可以让我获取一组记录(从网站上给定的一组情况 - 离题)。我可以随时(显然)调用这些。作为从数据库返回的这些记录的一部分,是它们的唯一 ID。当我在 DOM 中显示它们时,我使用 <span> 标记来保存每条消息的 ID,因此我能够向服务器进行 AJAX 回调,并将显示的最后一个 ID 传递给用户,然后我还有一个只会返回 ID 更大的 proc(稍后输入)。

如您所见,就技术上可行的情况而言,我知道它是可行的。我可以在 DOM 中的页面加载时显示一大堆消息,然后当它到达最后一个时,对服务器进行另一个 AJAX 调用以在顶部弹出更多消息,并不断更新它们。我主要是问上面的两个问题,这是一个好主意(一次在 DOM 中拥有这么多消息)吗?如果有任何更好的,我可以做到这一点的更有效的方法。

谢谢大家。

【问题讨论】:

    标签: jquery sql-server asp.net-mvc-2 dom architecture


    【解决方案1】:

    到目前为止,AJAX 调用可能是最有效的。一旦Web Sockets 最终停止变形和调整版本,这将是要走的路。看看我的问题和优秀的答案(一定要阅读 cmets):What's the Best Way to Open a TCP Stream to Server?

    关于您的主要问题,这是个好主意吗?当然。现在理所当然,进行大量 AJAX 调用的大公司拥有漂亮的大型服务器机房,里面装满了服务器,做着肮脏的工作。如果您没有这种服务器能力,您可以考虑在计时器上进行 AJAX 调用,例如每分钟左右,以减少服务器压力。
    有没有更好的办法?不是真的,直到 Web Sockets(见上文)完全发展。 AJAX 调用对我来说似乎是最好的选择(通过非常简单的 jQuery.ajax 方法发出 AJAX 请求,通过服务器以 JSON 格式返回,使用 jQuery 解析并填充到 DOM。非常好,真的。)

    【讨论】:

    • 我猜定时器上的 AJAX 请求是最有效的方式。这实际上会比计时器更有效一点,因为我只是在 DOM 完全清空后才发出新请求,而不是在这么多分钟/秒后发出调用。
    猜你喜欢
    • 1970-01-01
    • 2012-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-02
    相关资源
    最近更新 更多