php - Gmail Chat 如何在不进行长轮询的情况下向用户发送数据?

标签 php javascript ajax long-polling polling

我摆弄聊天程序已经有一段时间了。

使用 AJAX 轮询已经成功,但是它每秒向服务器发送一个请求,这对我来说似乎太昂贵了,更何况现在每 1000ms 很慢。

长轮询未成功。我发现我可以在我的服务器(Apache)上执行长轮询请求,但如果我运行长轮询请求,则网页的其余部分将呈现“死亡”。我无法单击文本框或输入内容。

我现在知道这是因为 Apache 使用多个线程进行长轮询请求,因此消耗了大量资源,与其他服务器类型不同。

我的问题:

1.如何在不进行长轮询的情况下创建相同的“即时消息功能”(或者如何在 Apache 上有效且成功地进行长轮询?)。我只需要

当(有人发送消息,服务器上的文件发生变化){向所有用户发送数据;}时,应该很容易吧?

我注意到 facebook 对客户端进行长轮询(在 Firebug 中),但是 Gmail 聊天显然没有,但却具有相同的功能?!

2.gmail聊天是如何做到的?

我已阅读 wiki关于 cometd 和 this article并观看了informative video ,演讲者说这可以用 PHP/JS 完成,并且对 IDEA 有很好的理解,我只想要 CODE..

最佳答案

我找到了一个长轮询 PHP 和 Apache 可行的解决方案。这是一种魅力。

http://www.zeitoun.net/articles/comet_and_php/start

我所要做的就是在 backend.php 中 set_time_limit(0); ,一切都应该如此。

关于php - Gmail Chat 如何在不进行长轮询的情况下向用户发送数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11939112/

相关文章:

javascript - 根据屏幕分辨率获取图像 [仅通过 HTML]

javascript - 值没有传递到类实例上

Nodejs 中的 jquery ajax 无法使用 https 获取/发布

javascript - jQuery Ajax : re-executing function on success, 当函数事先未知时

php - 安装 mysqli 是否意味着我的 mysql 查询将不再工作?

php - 如何使用 Laravel Excel 在 ->download() 之后重定向

php - 如何使用 PHP 和 MySQL 在 select 标记内显示数据库值

php - echo 修剪字符串中间的多个空格

javascript - Ckeditor 自定义插件 - 带单选按钮的对话框

ruby-on-rails - Rails 3.2 :remote => true, 提交后绑定(bind)