【问题标题】:jQuery server side push with ajax使用 ajax 的 jQuery 服务器端推送
【发布时间】:2012-01-27 20:54:13
【问题描述】:

我正在制作一个社交网络,我希望它像 facebook 一样流畅。
就像您查看控制台并查看日志记录一样,它不会一直使用 ajax 调用进行更新。

在我的网站上,我必须加载:通知(新通知的数量和通知本身)、好友请求(与通知相同)、在线好友(如果有在线它将加载在线用户的图片。 ) 那就是每 10 秒加载一次的 6 个 ajax 调用。这会导致巨大的带宽浪费和服务器请求。

因此我想,如果 SERVER 在有新更新时告诉 CLIENT 而不是 CLIENT 每 10 秒询问一次 SERVER。

我已经用谷歌搜索了这个问题并阅读了关于 ajax 推送和一个名为 comet 的框架。 我似乎找不到任何关于如何在 jQuery 上实现它的信息。

【问题讨论】:

  • 不是想成为一个混蛋,而是想在没有基本了解网络客户端/服务器协议的情况下构建下一个 Facebook 将是一项艰巨的任务。无论如何,jQuery 是客户端 javascript,所以决不能“从服务器推送”。但是,您可能需要查看“HTML5 通知”
  • 你有没有想过实现一个 cron 作业,每 x 时间执行一次服务器范围的推送?它将加载一个文件,该文件将自行运行,无论您指定多少次。我为我的能量棒使用计时器,该计时器在服务器时间上工作,但每五分钟通过一次 cron 作业更新它们。
  • 即使服务器可以向客户端发起请求,计算通信的本质是需要有一个监听线程定期检查接收到的消息.
  • 我并没有尝试构建下一个 Facebook,完全没有。我正在尝试为我和我的朋友制作一个简单的社交网络,但同时我想在开发方面获得更多经验。这就是为什么。除了我有一个糟糕的虚拟主机,他们的服务器无法处理 PHP 网站上的 1000 个用户,我的网站和所有 ajax 调用,这会让我暂停。

标签: php jquery ajax


【解决方案1】:

我简要地观察了彗星。它似乎是雄心勃勃的、实验性的,并且不会在任何旧服务器上运行。

据我了解,Comet 并没有真正推动,而是做一些称为“长轮询”的事情,我不会在这里尝试描述。网络上已经有几篇关于这个主题的好文章。

就个人而言,我会坚持当前的计划(传统的 AJAX),但会进行一次通用调用,将所有必要的数据捆绑到一个对象中并进行 JSON 编码。这会将 6 个请求减少到一个(每 10 秒)。

您可以巧妙地通过在返回的对象中返回空值来获取未更改的信息,从而最大限度地减少每个响应的长度。

【讨论】:

  • 是的,我明白你的意思。我无权访问服务器,这颗彗星超出了我的范围。我会尝试打 1 个电话,但我不确定如何解决;我打了 1 个电话,如果有一个是,将返回 6 个是或否或者如果有一个是服务器返回数据并且ajax调用可能包含6个结果?你更喜欢哪个?
  • 好的,但是如何拆分字符串和正确变量中的数据?
  • jQuery 让这方面的工作变得轻松。发出 .getJSON() 请求(或其 .ajax() 等效项)。 json 编码的响应(在 php 中很简单)将由 jQuery 解码,以在 javascript 中模仿在服务器端编码的数组/对象。然后,您只需使用例如探测响应。 response.factor1、response.factor2、response.factor3 等。每个因素本身都可以是一个数组或对象,因此可以根据需要提供完整的数据树。
【解决方案2】:

据我所知,您必须对您的网络服务器进行重大修改才能使此功能正常工作。另外,服务器端 php 也不是一个好的选择。

这里已经有人问过类似的问题:Using comet with PHP?

【讨论】:

    【解决方案3】:

    你也可以在 node.js 上尝试 socket.io。它非常适合实时通信 http://socket.io/

    【讨论】:

    猜你喜欢
    • 2012-02-26
    • 2010-11-27
    • 2012-01-21
    • 1970-01-01
    • 1970-01-01
    • 2011-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多