套接字编程、Java、Tomcat6、扩展

套接字编程、Java、Tomcat6、扩展,java,performance,multithreading,sockets,Java,Performance,Multithreading,Sockets,我对网络编程非常陌生,目前正在为移动应用程序开发一个网络后端。目前,我让用户使用servlet交互登录,一旦他们完全访问应用程序,我需要打开套接字连接,以便提供服务器推送。现在我遇到的问题是人们如何处理数千个并发套接字连接。我遇到过一些人在谈论线程池,它似乎很容易实现和NIO。是否有一些框架可供我使用,以确保我的服务器处理至少20-30k并发连接。我也可以忘记TCP连接,进行长时间的轮询,但据我所知,TCP是资源方面的最佳选择 @Steve-我正在研究前者:一个具有数千个连接的serversoc

我对网络编程非常陌生,目前正在为移动应用程序开发一个网络后端。目前,我让用户使用servlet交互登录,一旦他们完全访问应用程序,我需要打开套接字连接,以便提供服务器推送。现在我遇到的问题是人们如何处理数千个并发套接字连接。我遇到过一些人在谈论线程池,它似乎很容易实现和NIO。是否有一些框架可供我使用,以确保我的服务器处理至少20-30k并发连接。我也可以忘记TCP连接,进行长时间的轮询,但据我所知,TCP是资源方面的最佳选择


@Steve-我正在研究前者:一个具有数千个连接的serversocket。

我将立即研究web端集群,并将其用作主要的扩展机制。30k连接相当多,在达到某种服务器限制之前,您没有太多的增长空间。如果I/O本身并不繁重,我只会使用大量的线程和服务器,这些线程和服务器具有大量的马力和内存。让它以这种方式工作,这样您就可以发布,并且有一个后备计划,如果性能或扩展成为问题,可以切换到多路NIO,但是要注意,这是一个彻底的检修,编程的复杂性大约是java.net的十倍。经过几年的考虑,我越来越想知道NIO节约线程是否真的值得:它本身增加了几个新问题,例如需要推式解析;如果有工作线程需要更改通道的注册状态,则选择器会出现同步问题;有很多方法让代码出错;调度开销从操作系统转移到应用程序中,在应用程序中只有线性集合迭代器数据结构来处理它,除非您涉及到另一个复杂级别。值得记住的是,select()是为Unix而发明的,它允许节省昂贵的进程。线程确实非常便宜,并且提供了一个非常简单的编程模型,其中包含用于处理单个连接的内置上下文。NIO除了严格使用选择键附件外,几乎无法管理这一点,更不用说自然了。

长轮询发生在。。。打开TCP连接。:)你是在看一个有一千个TCP连接的服务器进程,还是一千个每个有TCP连接的服务器进程?是单向套接字还是你也打算接收这些套接字上的数据?我可以从这些套接字接收数据,但可能不太可能,更可能的情况是,我将只使用标准http交互,以便用户将数据写入我的服务器,我将只使用套接字更新相关的客户端。。。。