日期:2014-05-17  浏览次数:20690 次

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

------解决方案--------------------
不管在不在线都存入数据库中,用一个状态位来表示是否读取!
------解决方案--------------------
做过一个很简单的,只支持多人聊天,也是ajax异步更新,聊天信息存储分为服务器和用户端,服务器端通过管道,控制信息数量,先进先出,用户端通过js存储用户登陆后的全部聊天信息。
做的很粗糙,不知道有没有什么帮助。
------解决方案--------------------
呵呵 LS的方法也是可以的
WEB聊天 即时发送的话 服务器压力会比较大吧
QQ 是点对点协议!

------解决方案--------------------
因为是简单实现所以没有使用到数据库,然后考虑到大量的信息,对服务器影响是很大的,所以用到管道,比如以1000条信息为极限,当我加1001条信息的时候,我会删除掉第一条,这样能减少服务器的负担,然后通过js保存用户登陆到聊天室的全部聊天记录,这样解决了服务器上的聊天记录不全(因为最多只有1000条),当用户关闭页面聊天记录就没有了。
------解决方案--------------------
探讨
做过一个很简单的,只支持多人聊天,也是ajax异步更新,聊天信息存储分为服务器和用户端,服务器端通过管道,控制信息数量,先进先出,用户端通过js存储用户登陆后的全部聊天信息。
做的很粗糙,不知道有没有什么帮助。

------解决方案--------------------
前几年对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.
-----------------------------