Я создаю клиентское приложение сервера, используя netty и ios. У меня возникает проблема, когда пользователь просто отключает WiFi на своем ios-устройстве, а сетчатый сервер об этом не знает. Сервер должен знать, как сделать очистку для этого пользователя, и настроить его в автономном режиме, но теперь, когда пользователь пытается снова подключиться, сервер просто сообщает ему, что он/она уже подключен к сети.
Закрытое обнаружение канала Netty
Ответ 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-сервером? (какие рамки вы используете на стороне клиента и какой декодер/кодировщик используете?)