使用套接字将数据发送到指定的运行线程

时间:2013-09-11 16:40:37

标签: java multithreading sockets serversocket

我有一个多线程套接字服务器,为每个连接的客户端创建一个单独的线程来进行一些数据处理。实际上,我可以从所有连接的客户端接收数据,并为每个客户端执行相同的数据处理。

我现在需要做的是将一些数据发送到指定的连接客户端而不阻塞通信(我需要全双工通信)。我的问题是:

1)如何识别持有所需客户端的线程? 2)是否可以在不阻止通信的情况下向该客户端发送一些数据?

2 个答案:

答案 0 :(得分:0)

我认为这可以通过使用单独的线程来读取(和处理)并发送到每个客户端。线程可以共享BlockingQueue,例如ArrayBlockingQueue,处理线程会写入它,发送线程将从中读取并发送给客户端。

实际上,另一种方法是将读取线程与处理线程分开,并让处理线程也进行发送。您可以使用Executors.newSingleThreadExecutor进行处理,并让读取线程通过execute方法向其发送“jobs”。

您还可以使用Apache MINA等网络库,它可以为您实现所有细节,还可以使用具有可自定义线程模型的异步套接字来提高可扩展性。

答案 1 :(得分:0)

您应该使用SocketChannel实现通信。它支持全双工和非阻塞通信。

有关详情,请参阅SocketChannel

由于渠道与流的差别很大,这里的SocketChannels上有一个简短的Tutorial,其中有一个小例子。