Первое приложение Netty Combat

Java исходный код Java EE Netty TCP/IP

Будучи новичком на пути к 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 для обеспечения безопасности данных конфигурации;

Заинтересованные партнеры, пожалуйста, переместитеПрактика Нетти домовладельца

резюме

Хотя домовладелец часто использует Нетти, но много раз он все еще находится в состоянии знания некоторых концепций Нетти, и он не знает, почему. Поэтому он родился, чтобы повторно запустить Нетти в реальном бою. Продолжайте вести блог о процессе. Из-за ограниченных возможностей арендодателя в блоге неизбежно много ошибок, надеюсь, все предложения будут правильными.