У меня есть путаница на onWrite метода Java NIO, когда селектор готов писать я должен:java.nio на Write смятении
1: Регистрация/Изменение OP_Write
2: Если запись возвращает 0, что мне делать?
3: После записи следует ли регистрировать или изменять операционные системы?
канал установлен в Неблокирующий
....onAccept register OP_READ
public void onWrite()
{
ByteBuffer bb = ByteBuffer.wrap(msg.encode());
while(bb.remaining()!= 0){
int ret = socketChannel.write(bb);
if(ret == 0){
//Should I register or should I change op?
//socketChannel.register(selector, SelectionKey.OP_WRITE, null);
//selectionKey.interestOps(SelectionKey.OP_WRITE);
}
}
//Is it necessary to change op or re-register Read or 0
//socketChannel.register(selector, SelectionKey.OP_READ, null);
//selectionKey.interestOps(SelectionKey.OP_READ);
//selectionKey.interestOps(0);
}
Я пытаюсь выполнить самую низкую задержку, возможно. И канал не будет возвращаться назад, он просто будет читать или писать.
Спасибо за быстрый ответ, все эти разные руководства в Интернете смутили меня .. – feco
еще одно сомнение, отмените регистрацию и зарегистрируйтесь внутри цикла? – feco
Многие из них ошибаются или чрезмерно сложны, с ненужными очередями регистрации/регистрации, или не знают разницы между отменой ключа и закрытием канала или их обоим, или считают, что вы ничего не можете писать до тех пор, пока не начнется OP_WRITE. (2) находится рядом с обычным кодом записи, который находится внутри или вне цикла выбора, в зависимости от того, когда вам нужно писать; (3) находится внутри цикла выбора, в коде записи, который восстанавливается с нулевой записи. – EJP