当前位置:  技术问答>java相关

###用JAVA做聊天室的一个效率问题,请帮忙!###

    来源: 互联网  发布时间:2015-09-24

    本文导语:  我们正在用做JAVA一个聊天室,有如下一个效率问题,还请指教: 我们现在服务器端的机制是每接到某个客户端发过来的一句话就将这句话发送给其余所有在聊天室内的用户。 但是这样的话服务器端就会发送非常多的...

我们正在用做JAVA一个聊天室,有如下一个效率问题,还请指教:
我们现在服务器端的机制是每接到某个客户端发过来的一句话就将这句话发送给其余所有在聊天室内的用户。
但是这样的话服务器端就会发送非常多的消息,导致效率下降。
例如聊天室内有100个人,这100个人每人每秒发一条消息的话,那么服务器端每秒钟要发送接近10000条消息。n平方级的增长将导致人多时服务器负担过重。
考虑过采用组播,但是广域网上不能使用组播(因为有些路由器不支持)
这样的话应该怎样才能提高效率呢?
现有的那些高效率的聊天室是怎样解决这个问题的呢?

|
163用irc改的
大家都说让客户端自己去取,我觉得未必。
这种思路主要是沿袭了以往做web chat的经验,毕竟http协议是无状态协议,服务器无法主动“推”送数据给客户端,所以造成只能让客户端采用种种方式比如定时刷新或者xmlhttpget和remotescript等方式来“刷新”数据。
这样难道服务器负载就小么?
比如说1000个人同时在线,一秒钟刷新一次:如果一秒钟之内没有人发言呢?WebServer要接受1000个request...如果没有采用http 1.1的keep alive,那样对WebServer来说就是1000个Socket请求...

网易早先用IRC来做聊天室,后来据说使用java改了服务器端。想必是用hashset一类的collection来保存数据的。不过你可以采用一些cache机制,例如把半秒钟内更新的数据放在buffer中,定时向collection中的人发一次数据,而不是每次有更新都发。

我所知道的和推荐的,做这样的应用还用c比较好--如果你的需求中对效率问题比较敏感 x]

btw, 所谓的“推”技术,早先是一班不懂socket编程,从web开始进入编程领域的“程序员”提出的概念,所以造成后来的很多误解。

|
好象一般都不是服务器主动发送消息,而是客户端美隔一段时间去服务器上读取
每个客户端的消息都是些在服务器上统一的地方。其实也不是什么好办法。

|

我觉得服务端向客户端推信息是没法提高速度地

可以在数据库上建一个表,存放最近n条消息,客户端每隔一定时间自动刷新
也可不用数据库,应文件存放消息,但可能会比数据库慢


|
由每个客户间隔一定时间去刷新数据可以吗?

|
由客户端自己去向数据库刷新数据

|
由每个客户间隔一定时间去取服務器的数据

|
用过RaceChat吗?

华军软件园有,可以反编译来瞧瞧。

|
首先思路都不对,用户发的消息应该存在服务器里(其实用jsp很方便的,存在application变量里),由客户端定时刷新显示就可以了

|
这样聊天室的响应就会变慢,要是刷新的快的话屏幕就会闪,看着很不舒服。
这样对会使聊天室不好用。

还是推信息到客户端,最少客户端感到舒服,而且是实时的。每秒钟10000条

信息,服务器就不看重负了吗?

我也想知道,结果会怎么样?

不过,163,china都是用的推技术做的。

    
 
 

您可能感兴趣的文章:

  • 各路JAVA高手们,能否给我一个用JAVA写的简单聊天室代码?
  • 有没有java聊天室的源程序下载?分数全部给上只有这么多了
  • java编写聊天室?
  • 有人能发我一份 java 做的 聊天室 原码 么? 高分相送
  • 问一个163.com的聊天室和我本地JAVA出现矛盾的问题。。
  • 谁告诉我什么地方有基于java或jsp的聊天室代码下。
  • 高分求一个聊天室的java程序代码。
  • 500分求一好的jsp或java聊天室!非常感谢!
  • 400分求一好的jsp或java聊天室!非常感谢!
  • 求助java聊天室、公告栏、记数器、email的源代码
  • !求java聊天室源码,jsp,serlet均可。
  • 用JAVA实现语音交互的功能(即语音聊天室的功能)
  • 发现一个Java做得非常棒的聊天室(比chinaren的还棒),大家去看看http://www.kele8.com/game/login.htm,然后请发表评论!
  • 请问在编写Java小应用程序的时候,有些功能用JavaScript实现是否可以提高效率呢?
  • 我想学JAVA ,该从何入手,可以学的更有效率一些,请各位大虾指教
  • 关于java效率的问题.
  • 有没有提高java运行效率的方法,工具或是编程的技巧!
  • java 能做什么系统?CS是不是不行呀?开发效率岂不是很低
  • 在读较大文件(10M-100M)时,每次多几个byte,效率最高(use java)
  • 讨论:纯java的JDBC与JDBC-ODBC桥的比较?那种效率高、快?(面向服务端)
  • 听说java有一种数据库连接池的方式,效率比使用jdbc驱动程序高。不知是否真的这样?具体方式怎么实现?
  • 高效率的nio框架 nio java raptor
  • 大家讨论一下用java访问数据库的效率。
  • 请问各位高手用什么java开发环境比较方便,效率比较高?
  • 深入讨论Java效率,关心Java前途者请进
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • java新手的问题,java高手帮忙...
  • 没人帮忙吗?我想用JAVA编一个像WINDOW中的画图软件,现在出现了如下问题,请各位老哥老姐帮帮忙
  • 请教一些JAVA的基本问题,初学JAVA有些迷糊,帮帮忙!总迷糊实在受不了了!
  • 新手想学JAVA,帮忙!
  • 请帮忙推荐几个下载java电子书的网站,35分献上!
  • 帮忙给几JAVA技术网站最好都是中文的!!!!!
  • 请帮忙介绍一本java入门的书, 给分啦!
  • 怎样用java作一个屏幕保护程序?请帮忙
  • 用JAVA编一个程序,测试网络速度~~高手帮忙
  • java.mail的小问题,请帮忙。谢谢
  • JAVA高手们...帮忙...急!
  • 简单java 包制作,请帮忙找错在那!!!!
  • 初学JAVA,请各位高手帮帮忙!
  • 请问在那里可以下载java帮助??新手上路,请帮帮忙!
  • 编java mail时碰到的问题?高手帮忙!
  • 请大家帮忙!Sun Java认证具体情况:费用,资料,课程设置等
  • java高手请帮忙(程序编译中的问题)
  • 用visualage for Java 哥们来帮帮忙!~
  • 很简单的java程序,求大家帮忙,赚分的好机会!
  • 编写把一java程序中所有的print语句都删除,帮忙分析一下思路。
  • java命名空间java.sql类types的类成员方法: java_object定义及介绍
  • 我想学JAVA ,是买THINK IN JAVA 还是JAVA2核心技术:卷1 好???
  • java命名空间java.awt.datatransfer类dataflavor的类成员方法: imageflavor定义及介绍
  • 请问Java高手,Java的优势在那里??,Java主要适合于开发哪类应用程序
  • java命名空间java.lang.management类managementfactory的类成员方法: getcompilationmxbean定义及介绍
  • 如何将java.util.Date转化为java.sql.Date?数据库中Date类型对应于java的哪个Date呢
  • java命名空间java.lang.management接口runtimemxbean的类成员方法: getlibrarypath定义及介绍
  • 谁有电子版的《Java编程思想第二版(Thinking in java second)》和《Java2编程详解(special edition java2)》?得到给分
  • java命名空间java.lang.management接口runtimemxbean的类成员方法: getstarttime定义及介绍
  • 本人想学java,请问java程序员的待遇如何,和java主要有几个比较强的方向
  • java命名空间java.awt.datatransfer类dataflavor的类成员方法: stringflavor定义及介绍


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3