多客户端访问问题 threadserver 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 问题一:抽象的说你可以这样理解,建议你自己动手写一个服务器,就会明白请求从socket读出来,在应用层如何多线程去处理。现在更加流行的模型是reactor,java里就是nio,可以去对比一下问题二:12306的高峰并发不是一般的高,个中的 处理方式很复杂 1:不管你什么服务器,在系统内部CPU需要切换线程,你线程池数量越大,他切换的越频繁,这里需要你预估一个峰值,对于多核来说,多线程是有优势的,如果请求过多,而队列太小,一般会有超时机制。底层上来讲 他的backlog会去排队,超过了那个值,会被拒绝,但由于你处理的线程过多,导致你整个系统切换变慢,他会导致你的业务逻辑变慢,造成单机雪崩现象,所以这个线程池设置是比较有讲究的。2:在12306中,单台服务武器已经承受不起了,QPS太小,所以需要分布式部署服务器,对于分布式处理来说,又会涉及到多个系统通信,服务器负载均衡,智能CDN,系统运维监察,服务治理等,往往会设计到上百台服务器,对于12306 可能更多,他春运的相应量不亚于taobao11.11 ,具体可以看下淘宝的技术架构,这不是一个人所能做到的,当然大系统也是由各个小系统构成的,以前的一些同步策略要改成大量的异步通知,可能只有你订单是同步的,而多个系统异步,又会涉及到消息机制等。 最近我也在做这样的socket+thread的项目,我们的做法是有一个客户端管理类,管理所有的客户端连接。字段为:Vector<Vector<Socket>> Vector<Thread>比如一个vector存10个socket,存满后新建一个线程去处理这一个vector中的10个socket。然后在new vector 继续存储socket。 线程存入 Vector<Thread>。一个Thread处理一个vector,一个vector存储若干个socket。处理socket请求时,设置超时时间,若处理该socket的请求大于该时间,则将该socket关闭。判断该Thread处理的vector是否为空,为空则在管理类中删除该vector。大体是这样的思路,实现起来考虑的因素很多。 生成XML时抛org.dom4j.tree.DefaultDocument异常 static 类是如何分配内存的? 数值问题 关于随机数字出现的机率 谁能帮帮我 兄弟!我永远不会放开你的手,我们要一起做IT业里的巨人--群组招募 如果你支持java,请转发此贴,让更多的人知道真相 [转帖] 请不要做浮躁的人(希望你我共勉) 答过“ 大家都来谈谈自己学习Java的经验或看法!(来者有分)”帖子的兄弟,进行第三次接分啦!! 异常的继承和搜索??高手请进!! java中抛出的异常无法被捕获到,究竟是为啥,有高手来解答否 C3P0 连接池问题
12306的高峰并发不是一般的高,个中的 处理方式很复杂
1:不管你什么服务器,在系统内部CPU需要切换线程,你线程池数量越大,他切换的越频繁,这里需要你预估一个峰值,对于多核来说,多线程是有优势的,如果请求过多,而队列太小,一般会有超时机制。底层上来讲 他的backlog会去排队,超过了那个值,会被拒绝,但由于你处理的线程过多,导致你整个系统切换变慢,他会导致你的业务逻辑变慢,造成单机雪崩现象,所以这个线程池设置是比较有讲究的。
2:在12306中,单台服务武器已经承受不起了,QPS太小,所以需要分布式部署服务器,对于分布式处理来说,又会涉及到多个系统通信,服务器负载均衡,智能CDN,系统运维监察,服务治理等,往往会设计到上百台服务器,对于12306 可能更多,他春运的相应量不亚于taobao11.11 ,具体可以看下淘宝的技术架构,这不是一个人所能做到的,当然大系统也是由各个小系统构成的,以前的一些同步策略要改成大量的异步通知,可能只有你订单是同步的,而多个系统异步,又会涉及到消息机制等。
有一个客户端管理类,管理所有的客户端连接。
字段为:Vector<Vector<Socket>> Vector<Thread>
比如一个vector存10个socket,存满后新建一个线程去处理这一个vector中的10个socket。
然后在new vector 继续存储socket。 线程存入 Vector<Thread>。
一个Thread处理一个vector,一个vector存储若干个socket。
处理socket请求时,设置超时时间,若处理该socket的请求大于该时间,则将该socket关闭。
判断该Thread处理的vector是否为空,为空则在管理类中删除该vector。
大体是这样的思路,实现起来考虑的因素很多。