Закрытое обнаружение канала Netty

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

Ответ 1

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

Существует два способа прослушивания событий закрытого канала в 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
    }
});

Ответ 2

Используйте IdleStateHandler

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

Ответ 3

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