Как нижестоящие события работают в jboss netty? - PullRequest
3 голосов
/ 11 июля 2010

Только начал играть с netty в реализации моего собственного сервера. Мне потребовалось некоторое время, чтобы освоить его, но теперь я смог принимать клиентов, написав свой собственный MessageHandler, и внутри messageReceived я смог прочитать из буфера и выполнил некоторую бизнес-логику, связанную с полученными данными.

Однако теперь возникает вопрос: как записать данные в подключенные клиенты? Я видел пример кода, где вы можете написать на канал в случае появления нового сообщения, такого как:

public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) {
    Channel ch = e.getChannel();
    ch.write(e.getMessage());
}

но что, если вы не хотите записывать данные обратно в этот момент? Что если клиент остается подключенным к сокету и ожидает, пока на сервере не произойдет какое-либо событие? В таком случае, как мой сервер найдет правильный сокет для записи? Предполагается ли сохранить ссылку на объект канала? Это соглашение?

Я заглянул в код и увидел метод writeRequested. Это связано? Кто это называет? И нужно ли это?

1 Ответ

6 голосов
/ 11 июля 2010

Пока у вас есть ссылка на Channel (или ChannelHandlerContext), вы можете вызывать Channel.write () (или Channels.write ()) из любого места, любого потока.

writeRequested () вызывается, когда вы вызываете событие writeRequested, вызывая Channel.write () или вызывая ChannelHandlerContext.sendDownstream (MessageEvent).

...