资讯专栏INFORMATION COLUMN

Netty 客户端

null1145 / 3095人阅读

摘要:示例代码首先创建客户端处理读写的线程组然后继续创建客户端辅助启动类随后需要对其进行配置与服务端不同的是它的需要设置为然后为其添加此处为了简单直接创建匿名内部类实现方法其作用是当创建成功之后在进行初始化时将它的设置到中用于处理网络事件当客户

示例代码
public class TimeClient {

    public void connect(int port, String host) throws Exception {
        EventLoopGroup group = new NioEventLoopGroup();

        try {
            Bootstrap b = new Bootstrap();
            b.group(group).channel(NioSocketChannel.class)
                    .option(ChannelOption.TCP_NODELAY, true)
                    .handler(new ChannelInitializer() {
                        @Override
                        protected void initChannel(SocketChannel ch) throws Exception {
                            ch.pipeline().addLast(new TimeClientHandler());
                        }
                    });

            ChannelFuture f = b.connect(host, port).sync();

            f.channel().closeFuture().sync();
        } finally {
            group.shutdownGracefully();
        }

    }

    private class TimeClientHandler extends ChannelHandlerAdapter {

        private ByteBuf firstMessage = null;

        public TimeClientHandler() {
            byte[] req = "66666".getBytes();
            firstMessage = Unpooled.buffer(req.length);
            firstMessage.writeBytes(req);
        }

        @Override
        public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
            ctx.close();
        }

        @Override
        public void channelActive(ChannelHandlerContext ctx) throws Exception {
            ctx.writeAndFlush(firstMessage);
        }

        @Override
        public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
            ByteBuf buf = (ByteBuf) msg;
            byte[] req = new byte[buf.readableBytes()];
            buf.readBytes(req);
            String body = new String(req, "UTF-8");
            System.out.println(body);
        }
    }
}

首先创建客户端处理 IO 读写的 NioEventLoopGroup 线程组, 然后继续创建客户端辅助启动类 Bootstrap, 随后需要对其进行配置.

与服务端不同的是, 它的 Channel 需要设置为 NioSocketChannel, 然后为其添加 Handler. 此处为了简单直接创建匿名内部类, 实现 initChannel 方法, 其作用是当创建 NioSocketChannel 成功之后, 在进行初始化时, 将它的 ChannelHandler 设置到 ChannelPipeline 中, 用于处理网络 IO 事件.

当客户端和服务端 TCP 链路建立成功之后, Netty 的 NIO 线程会调用 channelActive 方法, 发送查询时间的指令给服务端.

当服务端返回应答消息时, channelRead 方法被调用. 发生异常时, 调用 exceptionCaught 方法.

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/72728.html

相关文章

  • 慕课网_《Netty入门之WebSocket初体验》学习总结

    时间:2018年04月11日星期三 说明:本文部分内容均来自慕课网。@慕课网:https://www.imooc.com 教学源码:https://github.com/zccodere/s... 学习源码:https://github.com/zccodere/s... 第一章:课程介绍 1-1 课程介绍 什么是Netty 高性能、事件驱动、异步非阻塞的IO Java开源框架 基于NIO的客户...

    Noodles 评论0 收藏0
  • netty搭建web聊天室(1)

    摘要:提供异步的事件驱动的网络应用程序框架和工具,用以快速开发高性能高可靠性的网络服务器和客户端程序。总结我们完成了服务端的简单搭建,模拟了聊天会话场景。 之前一直在搞前端的东西,都快忘了自己是个java开发。其实还有好多java方面的东西没搞过,突然了解到netty,觉得有必要学一学。 介绍 Netty是由JBOSS提供的一个java开源框架。Netty提供异步的、事件驱动的网络应用程序框...

    izhuhaodev 评论0 收藏0
  • Netty 源码分析之 一 揭开 Bootstrap 神秘的红盖头 (户端)

    摘要:目录源码分析之番外篇的前生今世的前生今世之一简介的前生今世之二小结的前生今世之三详解的前生今世之四详解源码分析之零磨刀不误砍柴工源码分析环境搭建源码分析之一揭开神秘的红盖头源码分析之一揭开神秘的红盖头客户端源码分析之一揭开神秘的红盖头服务器 目录 Netty 源码分析之 番外篇 Java NIO 的前生今世 Java NIO 的前生今世 之一 简介 Java NIO 的前生今世 ...

    zhaot 评论0 收藏0
  • netty学习总结(一)

    摘要:是什么是一个异步的,事件驱动的网络编程框架。责任链模式通过将组装起来,通过向里添加来监听处理发生的事件。相比于的的不仅易用,而且还支持自动扩容。入站入站事件一般是由外部触发的,如收到数据。 netty是什么? netty是一个异步的,事件驱动的网络编程框架。 netty的技术基础 netty是对Java NIO和Java线程池技术的封装 netty解决了什么问题 使用Java IO进行...

    CntChen 评论0 收藏0
  • Netty学习-Echo服务器户端

    摘要:服务器构成至少一个该组件实现了服务器对从客户端接受的数据的处理,即它的业务逻辑引导配置服务器的启动代码。至少,它会将服务器绑定到它要监听连接请求的端口上。需要注意的是,由服务器发送的消息可能会被分块接受。 Netty服务器构成 至少一个ChannelHandler——该组件实现了服务器对从客户端接受的数据的处理,即它的业务逻辑 引导——配置服务器的启动代码。至少,它会将服务器绑定...

    dreamGong 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<