Netty:查看通过Channel发送数据返回的ChannelFuture的实现类

说明

使用Netty框架,通过io.netty.channel.Channel的writeAndFlush(Object msg)函数发送数据,返回了一个ChannelFuture。但这个ChannelFuture是个接口,那么返回的真正的实现类是什么?我们可以查看下。

示例

代码片段

package com.thb.power.terminal;import java.io.BufferedReader;
import java.io.InputStreamReader;import com.thb.power.packet.register.RegisterRequestPacket;import io.netty.bootstrap.Bootstrap;
import io.netty.buffer.ByteBuf;
import io.netty.channel.Channel;
import io.netty.channel.ChannelFuture;
import io.netty.channel.ChannelFutureListener;
import io.netty.channel.ChannelOption;
import io.netty.channel.EventLoopGroup;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.nio.NioSocketChannel;/*** 主函数* @author thb**/
public class Terminal {// 要连接的服务端的host static final String HOST = System.getProperty("host", "127.0.0.1"); // 要连接的服务端的端口号 static final int PORT = Integer.parseInt(System.getProperty("port", "22335"));public static void main(String[] args) throws Exception {// 配置客户端EventLoopGroup group = new NioEventLoopGroup();try {Bootstrap b = new Bootstrap();b.group(group).channel(NioSocketChannel.class).option(ChannelOption.TCP_NODELAY, true).handler(new TerminalInitializer());// 启动客户端Channel ch = b.connect(HOST, PORT).sync().channel();//System.out.println("channel: " + ch.getClass().getName());ChannelFuture lastWriteFuture = null;BufferedReader in = new BufferedReader(new InputStreamReader(System.in));System.out.println("please input(register):");for (;;) {String line = in.readLine();if (line == null) {break;}				// 如果用户输入register,表示命令客户端发送注册请求给服务器if (line.toLowerCase().equals("register")) {RegisterRequestPacket registerRequest = new RegisterRequestPacket();// 返回的ByteBuf存放着注册请求的数据ByteBuf buf = registerRequest.build(ch);lastWriteFuture = ch.writeAndFlush(buf);System.out.println("ChannelFuture class name: " + lastWriteFuture.getClass().getName());					}}if (lastWriteFuture != null) {lastWriteFuture.sync();}} finally {// 关闭event loop以便终止所有的线程group.shutdownGracefully();}}}// ChannelInitializer的子类
package com.thb.power.terminal;import io.netty.channel.ChannelInitializer;
import io.netty.channel.ChannelPipeline;
import io.netty.channel.socket.SocketChannel;
import io.netty.handler.logging.LogLevel;
import io.netty.handler.logging.LoggingHandler;public class TerminalInitializer extends ChannelInitializer<SocketChannel> {@Overridepublic void initChannel(SocketChannel ch) throws Exception {ChannelPipeline p = ch.pipeline();p.addLast(new LoggingHandler(LogLevel.INFO));}
}

运行输出

在这里插入图片描述
由上面的输出可以发现,返回的真正的实现类是io.netty.channel.DefaultChannelPromise

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/55818.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode 热题 100 JavaScript--206. 反转链表

/*** Definition for singly-linked list.* function ListNode(val, next) {* this.val (valundefined ? 0 : val)* this.next (nextundefined ? null : next)* }*/ /*** param {ListNode} head* return {ListNode}*/1、逐个断键&#xff0c;将后一个节点放到前面 …

vue整合脑图编辑管理系统-kitymind百度脑图

前言 项目为前端vue项目&#xff0c;把kitymind百度脑图整合到前端vue项目中&#xff0c;显示了脑图的绘制&#xff0c;编辑&#xff0c;到处为json&#xff0c;png&#xff0c;text等格式的功能 文章末尾有相关的代码链接&#xff0c;代码只包含前端项目&#xff0c;在原始的…

SpringCloud(30):Nacos快速入门

1 安装Nacos Server 1.1 预备环境准备 Nacos 依赖 Java 环境来运行。如果您是从代码开始构建并运行Nacos&#xff0c;还需要为此配置 Maven环境&#xff0c;请确保是在以下版本环境中安装使用: 64 bit OS&#xff0c;支持 Linux/Unix/Mac/Windows&#xff0c;推荐选用 Linux…

STM32F103错误异常和错误处理(HardFault)

这两天在程序开发时&#xff0c;遇到了程序卡死的现象&#xff0c;所以&#xff0c;就怀疑是发生了HardFault&#xff0c;从而导致程序进入了HardFault的死循环。 参考的是这篇文章 stm32 HardFault错误调试记录_fault reports_苏提春晓_的博客-CSDN博客 不过这篇文章里有的地方…

HCIP 三层交换机

一、实现VLAN间通信 在传统的交换机组网中&#xff0c;默认所有网络都处于同一个广播域&#xff0c;带来了许多问题&#xff0c;VLAN技术的提出&#xff0c;满足了二层组网隔离广播域需求&#xff0c;使得属于不同的VLAN间网络无法通信&#xff0c;但不同VLAN之间又存在着互相…

Robot Framweork之UI自动化测试---AutoItLibrary封装上传文件

在实现UI自动化的过程中&#xff0c;遇到了文件上传的场景&#xff0c;涉及到Windows系统窗口&#xff0c;这就需要用到AutoItLibrary库。 一、文件上传流程 1、点击上传 2、输入文件路径&#xff0c;点击确定 二、上传功能自动化脚本 一&#xff09;点击上传 直接使用click e…

C++的vector

文章目录 迭代器失效问题构造函数赋值运算符begin() end()size() capacity() empty()reserve()operator[ ]insert()erase()resize() 迭代器失效问题 迭代器失效,实际就是迭代器底层对应指针所指向的空间被销毁了,而使用一块已经被释放的空间 1.扩容导致迭代器失效问题 在对…

uniapp h5支付宝支付后端返回Form表单,前端如何处理

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言1.调取接口拿到后端返回的form表单 前言 uniapp h5 支付宝支付&#xff0c;后端返回一串form表单&#xff0c;前端如何拿到支付串并且调用支付 1.调取接口拿到…

STM32 4G学习

硬件连接 ATK-IDM750C模块可直接与正点原子 MiniSTM32F103开发板板载的ATK模块接口&#xff08;ATK-MODULE&#xff09;进行连接。 功能说明 ATK-IDM750C是正点原子&#xff08;ALIENTEK&#xff09;团队开发的一款高性能4G Cat1 DTU产品&#xff0c;支持移动4G、联通4G和…

Leetcode | 42.接雨水 Trapping Rain Water

Leetcode | 42.接雨水 Trapping Rain Water 文章目录 Leetcode | 42.接雨水 Trapping Rain Water题目Solution 1:动态规划Solution 2: 单调栈Solution 3 : 双指针最快的方法代码 My SolutionReference>>>>> 欢迎关注公众号【三戒纪元】 <<<<< 题…

MySQL刷题遇到的盲点(五)窗口函数

窗口函数 语法&#xff1a; <窗口函数> over (partition by <用于分组的列名>order by <用于排序的列名>) partition by&#xff1a;用来对表分组&#xff08; partition 子句可以省略&#xff0c;省略就是不指定分组&#xff09; order by&#xff1a;是…

在Volo.Abp微服务中使用SignalR

假设需要通过SignalR发送消息通知&#xff0c;并在前端接收消息通知的功能 创建SignalR服务 在项目中引用 abp add-package Volo.Abp.AspNetCore.SignalR在Module文件中添加对模块依赖 [DependsOn(...typeof(AbpAspNetCoreSignalRModule))] public class IdentityApplicati…