我使用 java nio 和选择器自己制作了一个服务器。如果需要,我可以直接从客户那里接收数据并回答。
但是现在我想要一个可以处理数据的线程,并且它会随时向每个客户端发送数据。
那么我该怎么做呢?另外如何将所有通道保存在内存中以将数据写入每个客户端?
如果您需要,我可以使用 java nio 发布我的部分代码。
我使用 java nio 和选择器自己制作了一个服务器。如果需要,我可以直接从客户那里接收数据并回答。
但是现在我想要一个可以处理数据的线程,并且它会随时向每个客户端发送数据。
那么我该怎么做呢?另外如何将所有通道保存在内存中以将数据写入每个客户端?
如果您需要,我可以使用 java nio 发布我的部分代码。
创建一个可运行的新线程并确保它知道您的服务器,因为您的服务器应该知道所有客户端。如果客户端发送一条消息,通过数据处理器线程解析它并让它完成它的工作。完成处理您的任务后,请让服务器知道,以便他可以更新所有客户端。
提示:您应该使用LinkedBlockingQueue之类的东西为处理线程创建一个等待队列,这样您就可以始终将任务放入队列中,而无需等待任务完成。然后tad将等待队列中需要处理的东西。这样处理线程只会在队列中有实际任务时才使用 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);
}