2010-02-16 86 views
1

我开发了一个基于AJAX的聊天,以满足我的应用程序基于AJAX的聊天

这里是我做什么就聊天而言

  1. 有各种聊天室,并且用户可以点击任何聊天室,以开始聊天
  2. 用户登录并可以同时

只有一个聊天室的一部分,我把聊天室的数据(该聊天室的状态在数据库中的XML格式WH ICH如下所示)

<ChatRoom roomid="<roomid>"> 
     <Users> 
      <User uid="<uid>" username="<username>" color="" heartbeat=""> 
      <User uid="<uid>" username="<username>" color="" heartbeat=""> 
      <User uid="<uid>" username="<username>" color="" heartbeat=""> 
     </Users> 
     <Messages> 
      <Message id="" from="<username>">This is message text</Message> 
      <Message id="" from="<username>">This is message text</Message> 
      <Message id="" from="<username>">This is message text</Message> 
     </Messages> 
</ChatRoom> 

每当用户点击一个聊天室......我基本上发送一个GET请求到服务器和用户的UID ...服务器会在后台添加用户信息也给我的用户的列表在线(在线定义为谁拥有最后15分钟内的心跳的任何用户),并发送聊天室

现在的lastmessage ID创建一个AJAX请求和发送请求的每几秒钟...请求基本上发送用户已知的lastMessageID ...如果在该消息ID之后对聊天室有任何新的消息(每当一个新消息被添加到聊天室时,消息ID被增加...并且我也有环绕在地方限制的消息== 100)

每当新的消息是由服务器完成了...用户的浏览器视图获取新的信息更新的最大数量以及用户更新lastMessageID它知道

我希望这将清除画面有点

我的问题是:

  1. 从设计的角度来看...如何设计
  2. 在那里我可以做出改进
  3. 聊天来响应我发现,我需要检查新邮件每2秒......这可能在服务器
  4. 这是一个轮询机制上产生不必要的请求负载...有一个通知机制...就像一个客户端设置回调...和服务器回复回调时,每当有什么新的

任何意见,我的做法和我如何做事?

我很乐意回答任何问题,并与你们讨论

细节

非常感谢您的时间!

回答

0

在保持在XML 数据的数据库似乎矫枉过正,使用一个平XML(或JSON!)文件或只是一个数据库表,但可能不能同时使用。您可以使用长轮询/ Comet来处理回调/减轻轮询中服务器的负载。否则,看起来很理智。

看到这里,例如:http://en.wikipedia.org/wiki/Comet_%28programming%29