0
我自己使用java nio和选择器创建了一个服务器。如果需要,我可以直接从客户那里收到数据和答案。Java nio服务器客户端异步
但是现在我想要一个线程来处理数据,并且每次它都会向每个客户端发送数据。
那么我该怎么做呢?还有如何在内存中保存所有通道以将数据写入每个客户端?
如果你需要我可以用java nio发布我的代码的一部分。
我自己使用java nio和选择器创建了一个服务器。如果需要,我可以直接从客户那里收到数据和答案。Java nio服务器客户端异步
但是现在我想要一个线程来处理数据,并且每次它都会向每个客户端发送数据。
那么我该怎么做呢?还有如何在内存中保存所有通道以将数据写入每个客户端?
如果你需要我可以用java nio发布我的代码的一部分。
使用可运行的程序创建一个新线程,并确保它知道您的服务器,因为您的服务器应该知道所有客户端。如果客户端发送消息通过数据处理器线程解析它,并让它执行它的工作。完成处理任务后,让服务器知道,以便他可以更新所有客户端。
提示:您应该为处理线程创建一个类似于LinkedBlockingQueue的等待队列,以便您始终可以将任务放入队列中,而无需等待任务完成。然后,thead将等待队列中需要处理的事情。这样的处理线程将只使用CPU资源时有队列
这里居然任务是一个代码示例
public abstract class Queue implements Runnable {
private final LinkedBlockingQueue<Message> queue;
public Queue() {
this.queue = new LinkedBlockingQueue<Message>();
}
/**
* Adds a message to the queue.
* @param message
*/
public void add(final Message message) {
try {
queue.put(message);
} catch (final InterruptedException e) {
e.printStackTrace();
}
}
/**
* Waits for new messages
*/
@Override
public void run() {
while(true) {
try {
final Message message = queue.take();
processMessage(message);
} catch (final InterruptedException e) {
e.printStackTrace();
}
}
}
/**
* Processes the new message
*/
protected abstract void processMessage(Message message);
}
如果你要处理一个单独的线程每个连接有不需要通过添加NIO来迷惑自己。只需使用java.net类即可。 – EJP 2012-08-09 22:24:32
我的服务器可以接受+ -50个客户端,我不会创建1个线程/客户端。我只需要在内存中保留所有客户端通道以在需要时发送数据。 – kinaesthesia 2012-08-10 07:17:13