现在有一web系统,任何登录的用户 可能会发布 信息,所有在线的人 都可以 收到该信息,并做处理如果,考虑到性能,并发量,服务器压力 各位 有什么想法 ,谢谢

解决方案 »

  1.   

    参考一下服务器push技术,例如Comet。
    Google这个方面使用的是iFrame来实现的。
      

  2.   

    2000 左右的话,一个 tomcat 可承受不了
      

  3.   

    我有个想法,楼主看看是否适合。2k的并发量,对于服务器来讲,肯定是负担不起的。
    通常只能考虑换一种方式,或者,在现有基础上,实现负载均衡。
    换一种方式,应该是指抛弃B/S架构或者采用Push技术;
    负载均衡,应该是指多个Tomcat服务器进行均衡,或者,多数据库进行均衡。我的想法是:
    首先,考虑服务器的负担瓶颈是什么。
    通常情况下的Web聊天室,采用的是定时刷新页面的技术,每次刷新的内容,都是聊天室的聊天信息。
    而所有的聊天信息,都保存到数据库当中。
    那么,我们一步一步的来,负担重是由于并发量太大,造成页面响应缓慢,
    并发量目前不好解决,但,可以想办法加快响应速度。
    如果定时刷新的是静态页面,那么,对于服务器来说,不是相对会非常轻松吗 ?
    要想相应速度快,只能从数据访问上面着手了。问题的瓶颈就应该是聊天数据的访问上面。其次,采用什么样的方式来解决瓶颈问题。
    想来想去,也只想到了缓存技术。
    服务端和客户端都采用缓存技术。
    先说客户端的缓存,要存放历史的聊天记录,每次刷新页面,只取新的记录,
    取到后,连同历史记录一同显示给用户。刷新的时间间隔要适当的长一些,
    如果项目非要即时通信,那干脆换一种方式得了。
    当然,客户端还要有防止重复提交和频繁提交的功能。服务端的缓存,其实就是一张内存中的快表,可以通过时间来快速获取数据。
    快表是一个先进先出的队列,只保存3次刷新间隔的聊天记录。
    服务端创建一个守护线程,每次刷新间隔时间,都将聊天历史记录,从快表中迁移至数据库中。
    记住是迁移,不是复制。每次只迁移旧时间间隔的聊天记录,并且迁移的数据都不叠加。
      

  4.   

    启动一个线程单独管理一个缓存区A
    另外在开2个缓存区,(B,C)
    用户先用B, 这时把C值复制给A
    完事后用户用C,这时把B的值复制给A
    这样还可以不用同步锁
    用户获取数据的时候用 foreach 来复制
    这样在转化 B, C 的时候不会出错
      

  5.   

    用 for 和 foreach 的一个小小的不同
    不断的换用户需要读取的一段缓存,可以达到不用同步锁的效果
      

  6.   

    1、任何人发布要实时收到吗?并发小的话  浏览器通过循环ajax去掉后台直接从数据库取数据
    2、并发大的话不要直接使用数据库 中间设置一层缓存,数据直接去缓存读取(参考memcache)
    3、如果要求聊天性质的...这个性能会消耗的非常大  直接通过推技术实时推到前台页面(参考 dwr推技术)