曾经做过一个项目, 通信压力也很大, 由于各线程间无关联, 后来采用分组的办法了. 
将应用程序分为N份, 每份上负责 Total/N 个连接, 允许在同一台PC Server上.(4CPU+4G内存)

解决方案 »

  1.   

    同时连接3000个长连接吗?
    那还是考虑用c吧。3000个并发小case。
    我们曾经有个项目,设计4000个并发,连的再多jvm就报无法创建线程了
    说说你的具体需求看看,为什么要这么多客户端同时连上来
      

  2.   

    谢谢楼上兄弟的答复。引用:
    曾经做过一个项目, 通信压力也很大, 由于各线程间无关联, 后来采用分组的办法了. 
    将应用程序分为N份, 每份上负责 Total/N 个连接, 允许在同一台PC Server上.(4CPU+4G内存)---->端口只有一个同时连接3000个长连接吗?
    那还是考虑用c吧。3000个并发小case。
    我们曾经有个项目,设计4000个并发,连的再多jvm就报无法创建线程了
    说说你的具体需求看看,为什么要这么多客户端同时连上来---->终端本来就多,而且数据安全性要求高。是双向应答频繁,而且服务器端无法主动发出连接请求,所以必须是长连接。希望大家继续支持这个贴子,让碰到共同问题的朋友能参与近来讨论
      

  3.   

    ----------
    //端口只有一个
    我多做了1层(与终端对应的是1个端口, 分组的每组1个端口), 
    先做个缓冲. 那个项目实时性要求不是很高,允许N秒延时.另外,我觉得你说明为什么用长连接的那些原因有点奇怪.---------------->客户端请求连接的端口是唯一的,数据传输都是一个这个初始端口。
    另外不用长连接的话,当服务器端要发指令到终端的话无法主动连接,必须等客户端主动请求连接再应答(所以肯定会有5秒左右的数据差)
      

  4.   

    长连接的资源消耗的必然的.就像apache服务器要是把服务设置成keepalive模式,并发几百个也就到顶了。
    解决方法只能是加服务器,前面用交换机作负载均衡。
    如果你的业务逻辑没办法通过简单的增加服务器就解决压力问题的话,那么就算你现在能支撑3000个并发了,以后用户数再增加怎么办?所以个人意见,你还是考虑一下如何让你的应用能够分到N台服务器上去比较现实。
      

  5.   

    非阻塞方式,利用nio包里的类做一个nonblockingsocket服务器端吧100% CPU 这是轮询方式的 NIO 必须要付出的代价.但这并没有问题, 因为 NIO 虽然一直使用 100%CPU 但并不影响性能,该处理的数据一点也不耽误.而且服务器嘛,就运行这个服务, 就是 一直使用 100%CPU 也不会有任何的问题啊!!
      

  6.   

    控制线程数量,控制在50个以内,每个分配一个SOCKET长连接,在一次通讯结束后,从内存里REMOVE掉那个请求,再让这个线程sleep,等待下一个请求;