【发布时间】:2010-02-16 19:55:47
【问题描述】:
我开发了一个基于 AJAX 的聊天来满足我的应用程序
就聊天而言,这是我所做的
- 有多种聊天室,用户可以点击任意聊天室开始聊天
- 用户登录后一次只能加入一个聊天室
我保存了聊天室的数据(聊天室状态以XML格式保存在数据库中,如下所示)
<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>
每当用户点击聊天室...我基本上使用用户的 uid 向服务器发送获取请求...服务器将在后端添加用户信息并向我发送当前用户列表在线(在线定义为任何在过去 15 分钟内有心跳的用户)并发送聊天室的 lastmessage ID
现在我创建一个 AJAX 请求并每隔几秒发送一次请求...该请求基本上发送用户已知的 lastMessageID ...如果在该消息 ID 之后聊天室有任何新内容(messageID 每次递增新消息已添加到聊天室...而且我还设置了环绕以限制最大消息数 == 100)
每当服务器传递新消息时...用户的浏览器视图会更新为新消息,并且用户也会更新它知道的 lastMessageID
我希望这能让画面清晰一点
我的问题是:
- 从设计的角度来看...设计如何
- 我可以改进的地方
- 为了让聊天能够响应,我发现我需要每 2 秒检查一次新消息...这可能会在服务器上产生不必要的请求负载
- 这是一种轮询机制...是否有通知机制...例如客户端设置回调...服务器在有新内容时回复回调
关于我的方法的任何 cmets 以及我是如何做事的??
我很乐意回答任何问题并与你们讨论细节
非常感谢您的宝贵时间!!
【问题讨论】: