2012-01-27 112 views
0

我正在建立一个社交网络,我希望它像facebook一样流畅。
就像在控制台中查看日志一样,它不会随着ajax调用一直更新。jQuery服务器端推ajax

我的网站上我必须加载:通知(新的notifs和notifs本身的数量),朋友请求(与通知相同),在线的朋友(如果有任何在线,它会加载在线用户的图片。)这就是每隔10秒加载一次的ajax调用。这会造成巨大的带宽浪费和服务器请求。

因此,我想,如果服务器告诉客户有什么新的更新,而不是每隔10秒询问服务器的CLIENT会怎么样。

我已经使用了这个问题并阅读了关于ajax push和一个名为comet的框架。 我似乎无法找到关于如何在jQuery上实现这一点的任何信息。

+0

没有试图成为一个混蛋,但试图建立下一个Facebook没有对网络的客户端/服务器协议的基本了解将会是一个艰巨的任务。无论如何,jQuery是客户端的JavaScript,所以不能从服务器'推送。但是,您可能需要查看“HTML5通知” – 2012-01-27 21:03:24

+0

您是否考虑过实施一项cron作业,该作业将每x次执行一次服务器范围的推送?它会加载一个文件,它会自行运行,但通常是您指定的。我使用定时器来处理服务器时间的能量棒,但每五分钟通过一次cron作业更新它们。 – HenryGuy 2012-01-27 21:04:16

+0

即使服务器可以向客户端发起请求,计算中通信的性质也是如此,以至于需要作为一个监听线程定期检查接收到的消息。 – paislee 2012-01-27 21:05:43

回答

1

我简单地看了彗星。它似乎是雄心勃勃的,实验性的,不会在任何旧服务器上运行。

据我所知,Comet并没有真正推动这种做法,而是做了一种叫做“长轮询”的事情,我不想在这里描述。网络上已经有了关于这个主题的好几篇文章。个人而言,我会坚持使用当前的计划(传统的AJAX),但是将所有必要的数据捆绑到对象和JSON编码中进行一次通用调用。这将减少6个请求到一个(每10秒)。

您可以通过在返回的对象中返回空值来获取未改变的信息,从而最小化每个响应的长度。

+0

是的,我明白你的意思。我没有访问服务器,这个彗星是我的方式。我会尽量打1个电话,但我不知道如何解决它;我打1个电话,这将返回6是或否,如果这是一个是的,我让新电话对应的是?或者如果这是服务器返回的数据并且ajax调用可能包含6个结果?你喜欢哪个 ? – Flaashing 2012-01-27 21:19:16

+0

绝对是后者。 – 2012-01-27 21:21:57

+0

好吧,但我如何分割字符串,但数据在正确的变量? – Flaashing 2012-01-27 21:24:38

0

据我所知,您必须对您的网络服务器进行重大修改才能使这件事情起作用。另外,服务器端的PHP不是一个很好的选择。

有人已经在这里问类似的东西:Using comet with PHP?

0

您可以尝试socket.io上的node.js了。它适用于实时通信 http://socket.io/

+1

顺便说一句,这个项目使用jQuery与彗星https://github.com/SeanOC/jquery.comet – 2012-01-27 21:08:55