现要设计一个在线聊天系统,需要群聊功能,有一张群聊的信息表,有一个字段是判断该条信息是否已经被接收过。但问题是,如果群内的一个用户首先接收了该条信息,则其他用户将获取不到该条信息。不知如何设计,才能让每一个用户实时获取群内消息,望各位高手不吝赐教。聊天聊天室设计

解决方案 »

  1.   

    每个客户都要有个已接收信息表,里面记录了接收了的消息ID,每个客户登陆或者登陆后循环检查自己的消息ID表和公用消息ID有没有少的,少的就是要接收的,不过这个设计不是很合理。按理说在线聊天不就是大家一起聊,然后大家一起读取同一个表的数据,不用管什么接收没接收的,就是不停的读取公用表。
      

  2.   


    写一个类 实现了queue接口就行了
    单独起一个线程来操作这个queue
      

  3.   


    其实没有必要建已接受信息表,可以将上一次获取的最后一条消息的id保存在session里,然后每次获取id大于该值的消息,并重写该值。
      

  4.   

    http://download.csdn.net/detail/bichir/5088881这里有一个例子,写得比较粗的。很多细节方面需要自已去考虑。
    大概思路是,当客户一打开我聊天的地址,就让客户端以AJAX发出获取聊天信息,当请求上服务器时,判断当前是否有消息,若有则让服务器把消息放进他的那个writer里,如果没有,就把这个请求挂起来。直接有消息上来,才取消挂起(这里需要注意细节,超时问题,当过了一定时间没有消息,我们也要把这个挂起的线程取消,并让他重新发新请求)。当客户端成功获取消息或成功反回一次200状态,我们马上再让客户端发起请求,这样一个死循环。