【问题标题】:AJAX based chat基于 AJAX 的聊天
【发布时间】:2010-02-16 19:55:47
【问题描述】:

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

就聊天而言,这是我所做的

  1. 有多种聊天室,用户可以点击任意聊天室开始聊天
  2. 用户登录后一次只能加入一个聊天室

我保存了聊天室的数据(聊天室状态以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

我希望这能让画面清晰一点

我的问题是:

  1. 从设计的角度来看...设计如何
  2. 我可以改进的地方
  3. 为了让聊天能够响应,我发现我需要每 2 秒检查一次新消息...这可能会在服务器上产生不必要的请求负载
  4. 这是一种轮询机制...是否有通知机制...例如客户端设置回调...服务器在有新内容时回复回调

关于我的方法的任何 cmets 以及我是如何做事的??

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

非常感谢您的宝贵时间!!

【问题讨论】:

    标签: ajax chat


    【解决方案1】:

    将数据保存在 XML in 数据库中似乎有点过头了,要么使用平面 XML(或 JSON!)文件,要么只使用数据库表,但可能不能同时使用两者。您可以使用长轮询/彗星来处理回调/减轻轮询对服务器的负载。否则,看起来很正常。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-08
      • 1970-01-01
      • 2011-09-17
      • 1970-01-01
      • 2011-01-29
      • 2015-08-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多