netty官方文档 学习

本文档介绍了如何使用Netty实现TIME协议服务,通过创建一个时间服务来发送32字节的时间消息,并在发送后关闭连接。在处理流程中,主要关注连接建立后的消息发送和连接关闭,而无需处理接收数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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();
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值