netty官方文档 学习

Netty 官方文档-自学笔记1

(创建一个时间服务)

该协议实现了netty 的TIME 协议部分。与以往案例发送一个32字节的消息,而不需要接受任可请求,一旦发送完信息后,就关闭连接。
在该协议中,我们将学习如何建立连接并发送消息及在完成通信后关闭连接。
由于我们当前忽视了接收到的数据,只是在建立连接后就发送消息,因此不需要用到channelRead()方法。不过,我们应该重载了 channelActive() 方法。

package io.netty.example.time;

public class TimeServerHandler extends ChannelInboundHandlerAdapter {

@Override
public void channelActive(final ChannelHandlerContext ctx) { // 当建立连接准备通信时,该方法被唤醒
    final ByteBuf time = ctx.alloc().buffer(4); // 需要重新分配一个32位的字符流包含信息内容,通过.alloc()方法获取到ByteBufAllocator对象。
    time.writeInt((int) (System.currentTimeMillis() / 1000L + 2208988800L));
    
    final ChannelFuture f = ctx.writeAndFlush(time); // (3)
    f.addListener(new ChannelFutureListener() {
        @Override
        public void operationComplete(ChannelFuture future) {
            assert f == future;
            ctx.close();
        }//channelFuture 代表一个I/O操作是否被执行,任何请求操作不会被执行,因为左右的操作在netty中是异步的,所以执行完channelFuture后,需要调用close方法,但是close不会立即执行,会先返回一个future
    }); // (4)
}

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

}

发布了3 篇原创文章 · 获赞 4 · 访问量 1086

猜你喜欢

转载自blog.csdn.net/lyrun1/article/details/86137420