应用场景:实现一个类似网盘的项目,前端页面采用JSF组织,后端bean不是直接操作本地文件,而是需要通过socket走自定义协议与集群服务器进行通信,获取用户的相关信息之后展现在客户端页面中。但是考虑到前端的多并发操作,比如同时有多个用户登录,有的用户在上传文件,有的用户在下载文件,有的用户在做在线编辑等等,我的后端bean跟集群服务器的通信效率应该如果解决更高效呢?
目前我考虑到解决方案是使用线程池的方式来解决前端并发问题,但是因为要涉及到socket操作,这样搞起来是不是开销会很大啊?特别是高并发的时候?
而且,采用线程池方案的时候,线程池的大小将会受到JVM当前所能分配的线程数的影响。
如果不采用线程池的方式解决,有没有其他一些更好的解决方案呢?
socket建立连接-处理一个任务-立即销毁这样的过程肯定开销太大了。我上面说的是这样一个过程:
Worker:
(1)与集群服务器建立连接;
(2)监听(等待)任务队列,如果有任务产生,进入(4),如果没有进入(3);
(3)转入(2);
(4)获取任务与服务器进行交互处理并获取返回值返回调用线程;转(2);
当然,这个过程省略了一些生命周期控制的跳转,比如在什么时候关闭连接等。
肯定不需要每个请求开一个socket。采用任务队列的模式,后台是一个线程池,大小由你控制,每个线程是一个Worker,负责与集群服务器通信(即每个Worker创建一个Socket连接,并在这个连接上一个个处理任务),前端的每个请求只管把任务提交给线程池就行了,可以用Future 的api等待任务结束...