当前位置:  开发笔记 > 编程语言 > 正文

如何使用XAJAX和PHP编写实时聊天?

如何解决《如何使用XAJAX和PHP编写实时聊天?》经验,为你挑选了2个好方法。

如何使用XAJAX和PHP编写实时聊天?

换句话说,有没有办法从服务器向多个客户端发送xajax响应?或者是客户端每隔几秒检查一次新消息的唯一可能性?



1> 0scar..:

不可以.客户必须重复"轮询"服务器.

我认为这里的关键是思考交互设计.诀窍是欺骗用户认为聊天是即时的,但实际上它每1或2或3或10秒更新一次.

思路:

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

2)如果一个民意调查带来了来自其他用户的多条消息,请不要一次性添加它们,实际上在1-2秒左右的时间内添加它们,随机间隔,使它看起来像是在进来"即时"和独立.(如果一堆消息立即进入,用户很快就会意识到聊天在那里更新,而不是不断地.)

3)如果用户闲置x个时间.每10秒左右将轮询率降低一次.

4)如果用户处于活动状态,即发送大量消息,则更频繁地进行轮询.

5)为聊天最后更新时写入的每个频道都有一个静态文件.例如,文件chat-teenfun-lastupdate.txt包含1224934239您喜欢的内容或任何时间格式.静态服务此文件并让客户端轮询此文件以检查通道是否已更新,而不是调用chat-poll.php?ch=teenfun它进行动态检查.静态文件的速度提高了大约10-100倍,具体取决于动态脚本所涉及的工作,当您获得250多个用户轮询时,您将需要它.

祝好运并玩得开心点!

/ 0

PS.或者,您实际上可以让客户端对服务器执行ajax调用并使它们"挂起".那是你接受他们的请求并假装开始发回数据,但你只是暂停.当事情发生时,您使用适当的数据完成响应.为了实现这一点,我相信你需要编写自己的HTTP服务器,具体做到这一点,因为你不能在内存中挂起250个PHP进程.也许Lighttpd可以通过这种方式以某种方式使用LUA缓存模块.我不知道.虽然会很有趣.地狱我得尝试一下:)



2> hannson..:

当然有,但我不认为这对许多用户来说效率很高.您可以轮询每个客户端轮询服务器以查看是否有新消息,或者您可以使用服务器可以将新消息推送到客户端的彗星技术 - 查看XAJAX的Comet插件.如何使用XAJAX和PHP实现它是超出我的,但这是我将如何尝试实现它.

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

    对于客户端(发送者)发送的每条消息,更新客户端(接收者)的消息队列

    让客户端轮询服务器以获取队列中的新消息/通过comet推送新消息.

    如果有新消息,请更新GUI.

    冲洗,起泡,重复

使用像ejabberd这样的真正的IM服务器可以有很长的路要走,提高效率并允许用户通过桌面客户端进行连接(如果这就是你想要的).我可能会使用它作为后端,IOW ejabberd将是服务器,PHP将是在PHP中使用XMPP的客户端,并充当webgui的代理.

另请参阅:
Google Techtalk上的Gmail聊天功能(以及可扩展性问题)

这是我的0.02美元

推荐阅读
刘美娥94662
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有