Netty | 02 - 客户端启动流程以及常用api笔记
发布日期:2022-02-21 17:40:27 浏览次数:28 分类:技术文章

本文共 2708 字,大约阅读时间需要 9 分钟。

对于客户端的启动来说,和服务端的启动类似,依然需要:

  1. 线程模型
  2. IO 模型
  3. 业务处理逻辑
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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:计网协议 | TCP(2-流量控制)
下一篇:时间戳工具类,获取今天0时刻和今天23分59分59时刻

发表评论

最新留言

能坚持,总会有不一样的收获!
[***.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
怎么查看elementui版本_2021新年 Vue3.0 + Element UI 尝鲜小记 2019-04-21
adreno630gpu参数_小米8搭载Adreno 630图形处理器 比荣耀play上的GPU Turbo更成熟 2019-04-21
带bitlocker解密的pe_如何在PE下解锁bitlocker 2019-04-21
lj245a引脚功能图_谁找到74254,74LS245芯片引脚的功能和功能图啊? 2019-04-21
sts 创建webservice项目_通过eclipse将Java生成webservice | 学步园 2019-04-21
python数字字符串和数字相加_数字和字符串 2019-04-21
python风控模型举例_一文搞定风控模型6大核心指标(附代码) 2019-04-21
java arraylist 写入文件_java-将自定义对象的ArrayList写入文件 2019-04-21
ice glacier2 java_ICE提纲之demo/Glacier2/callback(跨网回调) 2019-04-21
java 转发上传文件_java 后台请求其他接口转发文件 2019-04-21
Java get set 同步_java – getResultSet()“每个结果只能调用一次” 2019-04-21
java jmx 配置_为什么在配置JMX时Java打开3个端口? 2019-04-21
java thread回调_使用Runnable在Java中实现回调 2019-04-21