2014-02-14 112 views
0

我正在开发基于套接字的web服务(套接字客户端)和外部服务器之间的通信。由于webservices是多线程的(服务器为每个服务请求创建一个线程),每个线程应该在外部服务器上打开一个新的套接字(在给定的端口上),还是应该在Web服务线程之间同步和共享套接字客户端。 我在这里感到困惑。打开的客户端Socket(java.net.Socket的对象)是一个昂贵的对象,如JDBC Connection,或者它可以(应该)由每个线程打开并在完成时由线程关闭。基于Webservice的套接字客户端

请帮

感谢

回答

0

如果你谈论的是为每一个请求到服务器中创建客户端的新Socket,然后就是做正确的方式。

这正是具有标签的浏览器也是如此。

拥有一个同步的Socket意味着您需要有一个线程名称/ ID,请求URL /或任何其他唯一ID或任何其他ID的映射/表来标识请求来自哪个线程以及哪个线程响应必须转发给。这肯定会遇到性能问题,而且不可扩展。

+0

在所有线程共享相同套接字的情况下,我可以使用blockQueues。由于线程可以产生请求并消费响应,我可以让singleton组件说“Soketer”持有套接字并且有两个BlockQueue(传入和传出)。传出队列上的任何消息都写入套接字,并且来自套接字的任何消息都会发送到传入队列。所有线程都有对Sockert对象的引用。 – amique