Будучи новичком на пути к Java, я раньше использовал Netty в своих проектах, и я также подписался на конкурс промежуточного программного обеспечения Ali из-за Netty, но мои навыки были слишком поверхностными, и я, наконец, отказался от этого. Недавно я столкнулся с Netty на работе младшая сестра Мина. В это время домовладелец чувствовал, что Нетти все еще нужно хорошо учиться. Таким образом, я продолжал ворочаться на дороге, чтобы стать большим цыпленком...
Введение в НИО
-
Netty — хорошо известная в мире Java сетевая структура на основе NIO, поэтому, когда дело доходит до Netty, необходимо представить NIO.
-
Java NIO, также известный как Non-blocking IO, NIO позволяет использовать неблокирующий IO, например: когда поток считывает данные из канала в буфер, поток все еще может делать другие вещи. Пока данные записываются в буфер, поток может продолжать их обработку. Запись в канал из буфера аналогична.
-
Java NIO в основном состоит из каналов, буферов и селекторов.Хотя в Java NIO есть много классов и компонентов, в целом каналы, буферы и селекторы составляют основной API. Другие компоненты и классы в основном вращаются вокруг этих трех. Для тех, кто заинтересован в NIO, пожалуйста, переместитеСерия руководств по Java NIO
Быстрый старт с Нетти
Как правило, когда арендодатель изучает новую технологию, он должен сначала прийти в «Hello, World», чтобы разогреть поле. Нетти, конечно, не исключение, здесь арендодатель внедряет эхо-сервер, так что же такое эхо?
Сначала нужно запустить клиент, затем установить соединение и отправить одно или несколько сообщений на сервер, где каждое эхо-сообщение возвращается клиенту. Конечно, это приложение не имеет особого смысла. Но это также может помочь нам понять Netty и изучить код шаблона Netty.
добавить зависимости maven
Как правило, программное обеспечение с открытым исходным кодом можно найти в репозитории maven, пожалуйста, переместитеФабричный репозиторий maven
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
<version>4.1.12.Final</version>
</dependency>
Код
Реализация кода на стороне сервера Echo, основная логика, реализованная в следующем коде, заключается в привязке номера порта и запуске службы, что является общим кодом шаблона в Netty.
public class EchoServer {
private final int port;
public EchoServer(int port) {
this.port = port;
}
public static void main(String[] args)
throws Exception {
// 服务器监听端口号
int port = 8080;
new EchoServer(port).start();
}
public void start() throws Exception {
// NioEventLoopGroup是处理I/O操作的多线程事件循环
EventLoopGroup group = new NioEventLoopGroup();
try {
// ServerBootstrap是一个用于设置服务器的引导类。
ServerBootstrap b = new ServerBootstrap();
b.group(group)
.channel(NioServerSocketChannel.class) // 使用NioServerSocketChannel类,用于实例化新的通道以接受传入连接
.localAddress(new InetSocketAddress(port)) // 设置服务器监听端口号
.childHandler(new ChannelInitializer<SocketChannel>() {
@Override
public void initChannel(SocketChannel ch) throws Exception {
ch.pipeline().addLast(new EchoServerHandler()); // 添加请求处理
}
});
// 绑定到端口和启动服务器
ChannelFuture f = b.bind().sync();
System.out.println(EchoServer.class.getName() +
" started and listening for connections on " + f.channel().localAddress());
f.channel().closeFuture().sync();
} finally {
group.shutdownGracefully().sync();
}
}
}
Код реализации EchoServerHandler, вот основная позиция использования Netty для реализации бизнес-логики сетевых операций. Переопределите здесь метод обработчика события channelRead(). Используйте этот метод для получения сообщений от клиента всякий раз, когда от клиента поступают новые данные.
@Sharable
public class EchoServerHandler extends ChannelInboundHandlerAdapter {
@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) {
// 覆盖channelRead()事件处理程序方法
ByteBuf in = (ByteBuf) msg;
System.out.println(
"Server received: " + in.toString(CharsetUtil.UTF_8));
ctx.write(in);
}
@Override
public void channelReadComplete(ChannelHandlerContext ctx)
throws Exception {
// channelRead()执行完成后,关闭channel连接
ctx.writeAndFlush(Unpooled.EMPTY_BUFFER)
.addListener(ChannelFutureListener.CLOSE);
}
@Override
public void exceptionCaught(ChannelHandlerContext ctx,
Throwable cause) {
cause.printStackTrace();
ctx.close();
}
}
Код клиента в целом похож на приведенный выше код, арендодатель не будет его размещать, просто оставьте как небольшую домашнюю работу, а заинтересованные друзья, пожалуйста, сделайте сами.
Хозяин использует позу Нетти
Арендодатель разработал службу платформы управления конфигурацией приложений на основе Netty и реализовал «предоставление единой службы управления конфигурацией для бизнеса», которую можно использовать «из коробки». Основные функции:
- Простой и удобный в использовании: очень легко начать работу, просто нужно ввести зависимости maven и одну строку конфигурации;
- Онлайн-управление: предоставление центра управления конфигурацией, поддержка онлайн-управления информацией о конфигурации;
- Отправка в режиме реального времени: после обновления информации о конфигурации информация о конфигурации будет отправлена в режиме реального времени, а данные конфигурации в проекте будут обновлены в режиме реального времени и вступят в силу без перезапуска онлайн-машины;
- Резервное копирование конфигурации: резервная копия данных конфигурации будет сохранена в MySQL для обеспечения безопасности данных конфигурации;
Заинтересованные партнеры, пожалуйста, переместитеПрактика Нетти домовладельца
резюме
Хотя домовладелец часто использует Нетти, но много раз он все еще находится в состоянии знания некоторых концепций Нетти, и он не знает, почему. Поэтому он родился, чтобы повторно запустить Нетти в реальном бою. Продолжайте вести блог о процессе. Из-за ограниченных возможностей арендодателя в блоге неизбежно много ошибок, надеюсь, все предложения будут правильными.