На традиционном сервере с блокирующим потоком я бы сделал что-то вроде этого
class ServerSideThread {
ObjectInputStream in;
ObjectOutputStream out;
Engine engine;
public ServerSideThread(Socket socket, Engine engine) {
in = new ObjectInputStream(socket.getInputStream());
out = new ObjectOutputStream(socket.getOutputStream());
this.engine = engine;
}
public void sendMessage(Message m) {
out.writeObject(m);
}
public void run() {
while(true) {
Message m = (Message)in.readObject();
engine.queueMessage(m,this); // give the engine a message with this as a callback
}
}
}
Теперь можно ожидать, что объект будет довольно большим.В моем цикле nio я не могу просто ждать, пока объект пройдет, все мои другие соединения (с гораздо меньшими рабочими нагрузками) будут ждать меня.
Как я могу только получить уведомление, что соединение имеетвесь объект, прежде чем он сообщит моему каналу nio, что он готов?