各位好,我现在有一个问题请教一下大家。
我网页上想实现一个类似MSN、QQ一样的实时聊天系统,要求支持一对一和一对多(群)的聊天功能,并且要能够支持较多人同时在线聊天。
我现在的想法是这样的:用户发送信息时,判断对方是否在线,如果对方在线则将信息缓存在内存中,如果不在线则将信息存入数据库供对方读取,接收信息时用AJAX异步每隔一段时间向服务器检索新的未读信息,第一次检索时先从数据库中检索是否有未读信息(在不在线时可能有其它用户发过来的信息),以后只检索内存中是否有新的信息,如果有则读取并将它删除。
不知道这种想法是否可行?会有什么样的问题?或是各位有更好的办法请不啬赐教。

解决方案 »

  1.   

    做过一个很简单的,只支持多人聊天,也是ajax异步更新,聊天信息存储分为服务器和用户端,服务器端通过管道,控制信息数量,先进先出,用户端通过js存储用户登陆后的全部聊天信息。
    做的很粗糙,不知道有没有什么帮助。
      

  2.   

    呵呵 LS的方法也是可以的
    WEB聊天 即时发送的话 服务器压力会比较大吧
    QQ 是点对点协议!
      

  3.   

    Intasa 能否将你的思路说清楚一点呢,谢谢了
      

  4.   

    js能读写本地文件系统吗?
    web qq的原理是很简单的,但实现比较复杂,需要用到反向ajax,至少可以用三种方式实现。
      

  5.   


    duoduo6153 能不能请你讲一下 web qq的原理呢?相信这里有很多朋友都想知道,先谢谢了。
      

  6.   

    呃,讲起来可就多了,这里也不合适哦。网上有很多这方面的资料,几乎都是介绍以反向ajax方式实现基于bs结构的即时通讯系统原理的。
      

  7.   

    前几年对QQ很感兴趣,自己做了一个简单的,楼主你还没有理清哦。
    你有没有想过如果做缓存的话,那时间是多久呢?
    时间久的话就失去了“实时聊天”的意义了。这也是聊天软件的特殊性。
    访问数据库是不可避免的。应为它要的是即时数据。
    我简述一下做法:
    1.数据库结构:
    表Message:
    hostid 外键,接受人
    postid 外键,发送人
    message 消息内容
    mdate 消息发送时间
    mstate 消息状态(0为未读,1为已读)2.发送消息时,将消息存入数据库,mstate为0
    例:a向b发送消息:“你好吗?”
    insert into Message values(a的id,b的id,系统时间,0)3.做一个定时器,每隔1秒向数据库中查询hostid为当前用户且mstate为0的记录,将记录放入结果集,将数据库中mstate改为1.
    -----------------------------
      

  8.   

    zhgeng_feijun :其它我的想法跟你是差不多的,只是我把在线用户的信息放在缓存中,用户定时从缓存中读取,这样来减少数据库查询次数.