首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用XAJAX和PHP编写实时聊天?

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

Stack Overflow用户
提问于 2009-06-08 16:55:51
回答 6查看 5K关注 0票数 7

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

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

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2009-06-08 18:58:30

不是的。客户端必须重复地“轮询”服务器。

我认为这里的关键是思考交互设计。诀窍是欺骗用户,使其认为聊天是即时的,但实际上它每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。也就是你接受他们的请求,假装开始发回数据,但是你只是暂停了一下。当发生某些事情时,您可以使用适当的数据完成响应。为了让它起作用,我相信你需要编写你自己的HTTP服务器,因为你不能让250个php进程在内存中挂起。也许Lighttpd可以以某种方式与LUA缓存模块一起使用。我不知道。不过会很有趣的。见鬼,我总得试一试吧:)

票数 8
EN

Stack Overflow用户

发布于 2009-06-08 17:30:03

当然有,但我不认为它对很多用户来说是非常有效的。您可以进行轮询,让每个客户端轮询服务器以查看是否有新消息,也可以使用服务器可以将新消息推送到客户端的comet technique -查看Comet plugin for XAJAX。我不知道如何使用XAJAX和PHP实现它,但这里是我尝试实现它的方法。

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

  1. 客户端(发送者)发送的每条消息更新客户端(接收者)的消息队列
  2. 让客户端轮询服务器队列中的新消息/通过comet推送新消息。
  3. 更新图形用户界面如果有新的messages.
  4. Rinse,,请重复

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

另请参阅:

Google Techtalk on Gmail's chat feature (and scalability issues)

那是我的0.02美元

票数 6
EN

Stack Overflow用户

发布于 2009-06-08 16:59:53

只要没有超文本传输协议推送技术,你就永远不会只使用JavaScript进行实时聊天。

可能的变通方法:

  • 使用Flash电影或Java小程序在服务器端执行一些套接字

轮询请求,持续几秒钟

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/965890

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档