NettyизChannelHandler
предназначен для обработки сетевых событий(нравитьсяданныечитать、данныеписать、соединять Учреждать、отключаться и т.п.) основные компоненты.
В Нетти,ChannelHandler
изжизненный циклиChannel
из状态紧密相关,В основном оно включает в себя следующие этапы:
handlerAdded
метод называется,Обычно это происходит, когдаChannelPipeline
во время инициализации,выражать一个新изChannelHandler
был добавлен вChannelPipeline
середина。channelRegistered
метод называется,это означаетChannel
已经成功注册到它изEventLoop
начальство。channelActive
метод называется,выражатьChannel
был успешно активирован,Вы можете начать получать и отправлять сообщения.channelRead
метод называется,это означает从Channel
серединачитать到了данные。channelReadComplete
Вызывается метод, который указывает на завершение операции чтения.channelInactive
метод называется,выражатьChannel
и远端主机失去了соединять,стал неактивным.channelUnregistered
метод называется,выражатьChannel
从它изEventLoop
начальство注销。handlerRemoved
метод называется,выражатьChannelHandler
отChannelPipeline
середина移除。这些方法из调用顺序иChannel
из状态转换顺序相对应,Формирование полного жизненного цикла. в практическом применении,В соответствии с различными потребностями,Разработчики могут переопределить эти методы для реализации пользовательской логической обработки.,比нравиться处理超时、захватывающая деятельность в сфере здравоохранения、кодек данных и т. д.
Мы до сих пор используем Netty Review - раскрыт механизм автоматического переподключения Netty: принципы и лучшие практикииз代码演示一下 добавим обработчик на стороне сервера
ch.pipeline().addLast(new LifeCycleInBoundHandler());
package com.artisan.reconnect;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelInboundHandlerAdapter;
/**
* handlerизжизненный Последовательность вызова интерфейса обратного вызова цикла:
* handlerAdded -> channelRegistered -> channelActive -> channelRead -> channelReadComplete
* -> channelInactive -> channelUnRegistered -> handlerRemoved
*
* handlerAdded: Вновь созданное соединение добавит обработчик в конвейер канала в соответствии со стратегией инициализации, то есть Channel.pipeline.addLast(new LifeCycleInBoundHandler) обратный вызов после завершения выполнения;
* channelRegistered: Этот обратный вызов будет вызван, когда соединение будет назначено определенному рабочему потоку.
* ChannelActive: Подготовка канала завершена, все конвейеры добавлены и закреплены за конкретными линиями, что свидетельствует о том, что канал готов и может использоваться.
* ChannelRead: клиент отправляет данные на Сервер, и этот метод будет вызываться каждый раз, указывая, что данные доступны для чтения;
* ChannelReadComplete: каждый раз, когда Сервер считывает полные данные, этот метод вызывается обратно, чтобы указать, что данные прочитаны;
* ChannelInactive: когда соединение отключено, будет вызван этот обратный вызов, указывающий, что базовое соединение TCP в это время отключено.
* channelUnRegistered: В соответствии с ChannelRegistered, когда соединение закрывается, связанный рабочий поток освобождается;
* handlerRemoved: Соответствует handlerAdded, метод обратного вызова после удаления обработчика из конвейера канала.
*/
public class LifeCycleInBoundHandler extends ChannelInboundHandlerAdapter {
@Override
public void channelRegistered(ChannelHandlerContext ctx)
throws Exception {
System.out.println("channelRegistered: канал, зарегистрированный в NioEventLoop");
super.channelRegistered(ctx);
}
@Override
public void channelUnregistered(ChannelHandlerContext ctx)
throws Exception {
System.out.println("channelUnregistered: канал отвязывается от NioEventLoop");
super.channelUnregistered(ctx);
}
@Override
public void channelActive(ChannelHandlerContext ctx)
throws Exception {
System.out.println("channelActive: канал готов");
super.channelActive(ctx);
}
@Override
public void channelInactive(ChannelHandlerContext ctx)
throws Exception {
System.out.println("channelInactive: канал закрыт");
super.channelInactive(ctx);
}
@Override
public void channelRead(ChannelHandlerContext ctx, Object msg)
throws Exception {
System.out.println("channelRead: В канале есть читаемое "данные" );
super.channelRead(ctx, msg);
}
@Override
public void channelReadComplete(ChannelHandlerContext ctx)
throws Exception {
System.out.println("channelReadComplete: чтение данных канала завершено");
super.channelReadComplete(ctx);
}
@Override
public void handlerAdded(ChannelHandlerContext ctx)
throws Exception {
System.out.println("handlerAdded: Обработчик добавляется в конвейер канала");
super.handlerAdded(ctx);
}
@Override
public void handlerRemoved(ChannelHandlerContext ctx)
throws Exception {
System.out.println("handlerRemoved: Обработчик удален из конвейера канала");
super.handlerRemoved(ctx);
}
}
В Netty жизненный цикл ChannelHandler тесно связан со статусом Channel, который в основном включает в себя следующие методы обратного вызова:
handlerAdded
: Вызывается, когда в ChannelPipeline добавляется новый ChannelHandler.channelRegistered
: Вызывается, когда канал успешно зарегистрирован в EventLoop.channelActive
: Вызывается, когда канал активирован и может начать получать и отправлять сообщения.channelRead
: Вызывается, когда данные читаются из канала.channelReadComplete
: Вызывается после завершения операции чтения.channelInactive
: Вызывается, когда канал становится неактивным.channelUnregistered
: Вызывается, когда канал выходит из EventLoop.handlerRemoved
: Вызывается, когда ChannelHandler удаляется из ChannelPipeline.Выше приведены основные методы обратного вызова жизненного цикла Netty ChannelHandler. Разработчики могут переписать эти методы по мере необходимости для реализации пользовательской логической обработки.
Клиент устанавливает соединение и завершает взаимодействие с помощью сообщения.
Клиент отключается