我有一个网站需要发送通知到在线客户端实时与Facebook相同,经过多次搜索后,我发现了大量关于推拉技术的文档。我从这些文档中发现了使用Ajax或套接字实现它们的方法。我需要知道什么是最好的使用在我的情况下,它是如何编码使用JavaScript或jQuery和PHP。推拉技术使用Ajax或套接字
回答
只要使用应用使用jQuery的长轮询技术。
套接字尚未支持到处,也需要在服务器上打开一个监听套接字才能工作。
我不能说你最好在你的情况下使用什么,而不知道你的情况。
在大多数情况下,客户端每隔一两秒钟就会检查一次服务器,询问是否发生了新的事情。大多数时候我更喜欢使用套接字,因为它可以在任何Web服务器上运行,而无需进行任何配置更改,并且支持任何支持AJAX的浏览器,甚至是旧版本。
如果您的客户端很少(因为每个客户端都需要在服务器上打开一个套接字),并且您希望实时实时,则可以使用websocket。有几个PHP实现,例如这一个:http://code.google.com/p/phpwebsocket/
我的情况与Facebook和Stackoverflow相同,当你回答我的问题时,它发送了我的通知,我需要做这样的事情,而我的网站预计会有很多用户。 – 2012-04-15 11:29:03
如果你有像Facebook这样的“无限服务器能力”,我会选择带有替代解决方案的套接字用于旧版浏览器。 如果你不这样做,是否延迟一秒或更短(如果你愿意的话,你可以每隔250毫秒检查一次更新)对你的用户真正重要吗?如果是这样,请选择套接字。如果没有,请定期选择AJAX请求。 – 2012-04-15 11:41:36
如果您可以确保每个登录用户将只有一个浏览器打开,那么您可以轻松应用此长轮询技术。
政策AJAX调用:
- 不要要求每2秒。
- 但是等待请求后2秒才能获得前一个请求的响应。
- 如果一个请求在12秒内没有响应,那么不要等待发送新的请求。这是连接丢失的情况。
策略服务器响应:
是否有更新马上响应。根据会话检查是否有更新; (如果你能从客户端发送一些提示,比如收到最新消息,这个第二个更新检查机制将消除单个浏览器打开的限制,如上所述)
否则sleep(1秒; (不要使用无限循环但使用睡眠),然后检查是否有更新;如果更新有响应;如果不再睡1秒钟;重复这一点,直到总经过了10秒,然后用无更新回应回
如果应用此策略(俗称长轮询),你会发现处理器的使用在重负载下从95%降低到4%案件。
希望这解释。祝你好运。
感谢您的回答,但还有另外一个问题是我如何检查更新,我使用的程序是每个用户在我的网站上都有一个页面;当用户添加,删除或更新他的页面时,我必须向页面追随者发送通知。我的数据库中有一张表用于保存通知。如你所说,为了获得更新,我需要每隔1秒访问数据库到服务器端以检查是否有更新。有没有另一种获取更新而无需访问数据库? – 2012-04-15 12:36:23
您可以尝试使用文件锁定共享内存。但我希望你不要求,因为你大部分时间都在服务器端休眠,只有几秒钟才能唤醒你的查询。你的TCP握手需要比PHP处理更多的时间,这就是为什么我们使用这种长轮询技术,在每次握手之间等待很长时间(syn-fin)。 – 2012-04-15 12:51:40
正在访问数据库每1秒代表数据库中的重负载?假设有1000个用户,这意味着1000数据库访问/秒 – 2012-04-15 13:05:13
- 1. 使用推技术
- 2. 如何实现服务器推送(推技术)要么http或Windows套接字
- 3. 套接字以外的网络技术
- 4. .NET“推”技术?
- 5. ajax技术
- 6. 虚拟推技术?
- 7. LAN Dashboard的技术推荐
- 8. 在他们的主页(或其他有用的页面)上使用AJAX或推送技术的网站示例
- 9. 如何选择Ajax技术
- 10. Javascript或jquery加密技术
- 11. Ajax - 推拉?
- 12. 使用图像技术
- 13. 如何使用Bluemix技术
- 14. 需要技术推荐/建议
- 15. 可推技术/彗星伪造?
- 16. 使用Java客户端和JBoss实现推送技术Webervices
- 17. 使用AJAX或类似的技术来缩小已经存在的列表
- 18. AJAX仍然是一个轮询技术
- 19. AJAX Web开发的最佳技术
- 20. 接口技术倍频和拉撒路/ FreePascal的与T加工
- 21. 虚拟之旅使用素描,ajax,闪光技术
- 22. jquery和ajax在哪里使用这些技术?
- 23. Rails中的最新和可接受的ajax技术
- 24. ddply:推或拉?
- 25. Chrome - 禁用Web套接字或关闭Web套接字连接?
- 26. 我可以使用什么技术在Google Chrome应用中实现原生套接字支持?
- 27. 服务器推送技术(aka。“COMET”,“http服务器推送”,“websockets”)
- 28. 需要使用或不使用新技术或框架的Coldfusion安全指南
- 29. 高性能C#服务器套接字的技巧/技巧
- 30. 推迟使用`.load()`和/或ajax堆栈
是实时的长池支持。如何实施? – 2012-04-15 11:33:34