У меня есть сервер и клиент.(Написанные на Java). Они общаются между собой путем отправки пакетов. Проблема заключается в том что если клиент выходит из программы то серверу отсылается пакет с данными. Проблема в том что если клиент внезапно выйдет(упадет отключится,цунами,потом,ураган) то серверу не отправится пакет об отключений клиента. И он будет считать что он подключен. На netty как мне говорят создается канал по которому если обрывается связь то он умирает.Возможно ли это реализовать в Java? Была идея отправлять каждую секунду от сервера клиенту пакет с данными "ping" и если ответ от клиента будет "pong" то продолжать с ним работу. Если ответа не будет то удалять его из сервера как работающего.
Что вы мне посоветует? Я плохо конечно разбираюсь в сокетах(пока что) Но там можно от сервера принимать подключения а клиент может подлючаться и получать информацию. Только я в этом не понял что будет если закрыть соеденение. Будет ли сообщение клиенту и серверу о разрыве соеденения?
В "Netty in Action" есть глава посвящённая этой теме. Код оттуда:
public class IdleStateHandlerInitializer extends ChannelInitializer<Channel> {
@Override
protected void initChannel(Channel ch) throws Exception {
ChannelPipeline pipeline = ch.pipeline();
pipeline.addLast(new IdleStateHandler(0, 0, 60, TimeUnit.SECONDS));
pipeline.addLast(new HeartbeatHandler());
}
public static final class HeartbeatHandler extends ChannelStateHandlerAdapter {
private static final ByteBuf HEARTBEAT_SEQUENCE =
Unpooled.unreleasableBuffer(Unpooled.copiedBuffer("HEARTBEAT",
CharsetUtil.ISO_8859_1));
@Override
public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception {
if (evt instanceof IdleStateEvent) {
ctx.writeAndFlush(HEARTBEAT_SEQUENCE.duplicate())
.addListener(ChannelFutureListener.CLOSE_ON_FAILURE);
} else {
super.userEventTriggered(ctx, evt);
}
}
}
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Как можно обновить все фрагменты view pager? То есть чтобы фрагменты создались заново, в том числе текущий
Есть некоторе количество ссылок на файлы, которые лежат в блоках (div > li > a)Их надо обрезать до названия файла, т