我怎么可以写一个实时聊天使用XAJAX和PHP?

换句话说,是否有一种方式发送xajax响应从服务器上的多个客户?或者是唯一的可能性,以检查新的消息,每隔几秒钟就客户的身边?

有帮助吗?

解决方案

没有。客户端必须 “轮询” 服务器repeatadly。

我觉得这里的关键是要考虑交互设计。关键是要在用户误以为该聊天是即时的,但是当实际上它更新一次,每1或2或3或10秒。

思路:

1)当用户发送消息时,在聊天直接显示它并触发轮询。

2)如投票回来与来自其他用户的多条消息,不添加一次全部,实际添加它们在一段1-2秒左右的,具有随机间距,使它看起来像他们”再在“瞬间”和独立的到来。 (如果一束消息中的,一旦用户是非常快进来意识到聊天更新那里,然后,和不continiously。)

3)如果用户是空闲的时间x量。降轮询速率到每10秒左右。

4)如果用户是活动的,即发送大量的邮件,轮询更频繁。

5)有你写的时间聊天最后更新于每个通道的静态文件。例如文件chat-teenfun-lastupdate.txt有内容1224934239或任何时间格式你喜欢。静态地服务于这个文件,然后让客户机轮询该文件以检查通道已经更新,而在调用chat-poll.php?ch=teenfun,做了动态检查。静态文件供应各地快10-100倍,这取决于所涉及的动态脚本的工作,你会需要它时,你会得到250个+用户投票。

祝你好运,玩得开心!

/ 0

PS。 另外,您可以居然让客户做一个AJAX调用服务器,并让他们“挂”。这是你接受他们的请求,并假装开始发送数据回,但你只是暂停。当一些happends完成与选择恰当的数据的响应。对于这个工作,我相信你需要,虽然编写自己的HTTP服务器,即专门做这个,因为你不能有250个PHP进程在内存中徘徊。也许Lighttpd的可以在某种程度上这种方式与LUA缓存国防部使用。我不知道。将是有趣的,但。地狱我一定要尝试它的某个时候:)

其他提示

肯定有,但我不认为这将是非常有效的,与许多用户。你可以做询这里每个客户调查服务器以看到,如果有任何新的消息,或者您可以使用 彗星技术 在其服务器可以推动的新消息的客户,检查了 彗星的插件对XAJAX.如何,这将是实施使用XAJAX和PHP超出了我,但这是怎么我会努力实现它。

让每个客户连接到服务器(登录等等),则:

  1. 对于每一个消息发送的客户(发送者)更新的信息队列为客户(接收器)
  2. 让客户调查服务器的新消息在排队/推动的新消息通过彗星。
  3. 更新GUI如果有新的消息。
  4. 冲洗干净,泡沫,请重复

使用一个真正的讯服务器等ejabberd可能很长的路要走,以更有效和允许用户连接到客户的桌面(如果这是你想要的).我可能会使用,作为后端,IOW ejabberd将服务器和PHP将是客户使用 。在PHP, 和充当代理的webgui.

参见:
谷歌Techtalk Gmail上的聊天功能(和可扩展性问题)

这是我的0.02美元

只要没有不HTTP推动技术的你将永远不会得到一个只有使用实时聊天 JavaScript.

可能workarrounds:

  • 使用 Flash 电影或 Java 小程序来执行某一套接通信
  • 抱询请求在服务器上面几秒钟

您可以使用WebSockets,但作为一个新的HTML5功能,它还挺有限。幸运的是有 socksjs ,这对不处理它的浏览器实现的WebSockets。

在托管服务方面,你应该能够使用任何WebSockets的服务器,有一个为PHP等等。

如果您正在寻找实现与脚本语言如编写的聊天服务器PHP / JSP,挂HTTP连接将有技术,从你的选择名单中勾掉。原因是大部分的网页西弗斯(特别是共享主机)的不喜欢太多的连接挂。

您可以找到您需要实现Web客户端和PHP聊天服务器在此的 “优化聊天服务器协议服务器端脚本语言” 出版物。

我见过的最好的策略是做对消息的AJAX请求,然后重新启动完全相同的请求,只要它完成。

在服务器端,使脚本“失速” 60秒或直到接收到新的消息。这使打开60秒的最大值相同的连接,而是接收到新的消息时,它输出它并立即停止,促使客户端AJAX打开另一个连接。

此提供了新的消息的几乎即时通知,也是在服务器上比建立新连接每x秒容易得多。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top