Netty Channel закрытое обнаружение - PullRequest
11 голосов
/ 09 января 2012

Я создаю серверное клиентское приложение с использованием netty и ios. У меня возникает проблема, когда пользователь просто отключает WiFi на своем устройстве ios, сервер netty не знает об этом.Сервер должен знать, как выполнить очистку для этого пользователя и установить его / ее в автономный режим, но теперь, когда пользователь пытается подключиться снова, сервер просто сообщает ему, что он / она уже подключен.

Ответы [ 3 ]

15 голосов
/ 09 января 2012

Если я правильно понял вашу проблему: вы хотите прослушивать события закрытия канала клиента на стороне сервера и выполнять некоторую очистку сеанса,

Существует два способа прослушивания событий закрытия канала в Netty:

1) Если ваш обработчик сервера расширяет SimpleChannelHandler/SimpleChannelHandler, то вы можете переопределить следующий метод и записать там логику очистки сеанса

public void channelClosed(ChannelHandlerContext ctx, ChannelStateEvent e) throws Exception;

2) Если у вас есть только доступ к ссылке на канал, то выможет закрыть канал в будущем и зарегистрировать реализацию ChannelFutureListener с помощью логики очистки сеанса,

ChannelFuture closeFuture = channel.closeFuture();

closeFuture.addListener(new ChannelFutureListener() {
    @Override
    public void operationComplete(ChannelFuture future) throws Exception {
        //session cleanup logic
    }
});
3 голосов
/ 26 июля 2014

Использование IdleStateHandler

Вы можете определить, когда в заданные интервалы времени нет запросов / ответов.

1 голос
/ 18 апреля 2012

Проверьте идентификатор сессии и разрешите пересмотр.Или вы можете использовать что-то вроде контроллера cookie.Могу я задать не по теме вопрос: как ваш клиент на ios взаимодействует с сервером netty?(какой фреймворк вы используете на стороне клиента и какой декодер / кодер используете?)

...