Netty | 02 - 客户端启动流程以及常用api笔记
发布日期:2022-02-21 17:40:27
浏览次数:28
分类:技术文章
本文共 2708 字,大约阅读时间需要 9 分钟。
对于客户端的启动来说,和服务端的启动类似,依然需要:
- 线程模型
- IO 模型
- 业务处理逻辑
package com.jd.netty.shandianxia.netty;import io.netty.bootstrap.Bootstrap;import io.netty.channel.Channel;import io.netty.channel.ChannelInitializer;import io.netty.channel.ChannelOption;import io.netty.channel.nio.NioEventLoopGroup;import io.netty.channel.socket.SocketChannel;import io.netty.channel.socket.nio.NioSocketChannel;import io.netty.handler.codec.string.StringEncoder;import io.netty.util.AttributeKey;import java.util.Date;import java.util.concurrent.TimeUnit;/** * @author :ChenHao86 * @date :Created in 2022/2/7 16:33 * @description: * @modified By: * @version: $ */public class NettyClient { private static Integer MAX_RETRY = 6; public static void main(String[] args) { NioEventLoopGroup workerGroup = new NioEventLoopGroup(); 指定引导类 Bootstrap bootstrap = new Bootstrap(); bootstrap // 1.指定线程模型 .group(workerGroup) // 2.指定 IO 类型为 NIO .channel(NioSocketChannel.class) // 3.IO 处理逻辑 .handler(new ChannelInitializer() { @Override public void initChannel(SocketChannel ch) { } }) // attr() 方法可以给NioSocketChannel绑定自定义属性 // 可通过channel.attr()取出这个属性 // 说白了就是给NioSocketChannel维护一个 map 而已 .attr(AttributeKey.newInstance("clientName"), "nettyClient") // 表示连接的超时时间,超过这个时间还是建立不上的话则代表连接失败 .option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 5000) // 表示是否开启 TCP 底层心跳机制,true 为开启 .option(ChannelOption.SO_KEEPALIVE, true) // 表示是否开始 Nagle 算法,true 表示关闭,false 表示开 // 如果要求高实时性,有数据发送时就马上发送,就设置为 true 关闭,如果需要减少发送次数减少网络交互,就设置为 false 开启 .option(ChannelOption.TCP_NODELAY, true); // 4.建立连接 connect(bootstrap, "juejin.cn", 80, MAX_RETRY); } private static void connect(Bootstrap bootstrap, String host, int port, int retry) { bootstrap.connect(host, port).addListener(future -> { if (future.isSuccess()) { System.out.println("连接成功!"); } else if (retry == 0) { System.err.println("重试次数已用完,放弃连接!"); } else { // 第几次重连 int order = (MAX_RETRY - retry) + 1; // 本次重连的间隔 int delay = 1 << order; System.err.println(new Date() + ": 连接失败,第" + order + "次重连……"); bootstrap.config().group().schedule(() -> connect(bootstrap, host, port, retry - 1), delay, TimeUnit.SECONDS); } }); }}
转载地址:https://blog.csdn.net/weixin_40597409/article/details/122903882 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
能坚持,总会有不一样的收获!
[***.219.124.196]2024年03月15日 04时12分28秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
oracle昨日时间,。。今日,昨日,上周,本月,本年,按时间统计总金额
2019-04-21
php验证卡号,PHP验证信用卡卡号是否正确函数
2019-04-21
mpvue微信小程序动画_推荐两个微信小程序开发框架
2019-04-21
固态硬盘分为哪几种_零基础玩转固态硬盘 深度排雷 买SSD掌握这些就够了
2019-04-21
调python返回图片_Python异常处理,3个好习惯分享给你
2019-04-21
15拆解_收藏:15款劲芯微芯片无线充产品拆解
2019-04-21
弹出u盘_都说:U盘直接拔出不会丢失文件,“安全弹出”形同虚设,对吗?
2019-04-21
带bitlocker解密的pe_如何在PE下解锁bitlocker
2019-04-21
lj245a引脚功能图_谁找到74254,74LS245芯片引脚的功能和功能图啊?
2019-04-21
python数字字符串和数字相加_数字和字符串
2019-04-21
python风控模型举例_一文搞定风控模型6大核心指标(附代码)
2019-04-21
java 转发上传文件_java 后台请求其他接口转发文件
2019-04-21
java jmx 配置_为什么在配置JMX时Java打开3个端口?
2019-04-21
java thread回调_使用Runnable在Java中实现回调
2019-04-21