当前位置: 首页 > news >正文

c 2015 做网站人工在线客服

c 2015 做网站,人工在线客服,网站设计要多少钱,纸做的花朵成品网站背景 近日要开发一个tcp客户端程序去对接上游厂商的数据源,决定使用netty去处理,由于很久没有开发过netty了,顺便学习记录下 netty搭建 考虑到我们需要多个client去对接server服务,所以我们定义一个公共的AbstractNettyClient父…

背景

近日要开发一个tcp客户端程序去对接上游厂商的数据源,决定使用netty去处理,由于很久没有开发过netty了,顺便学习记录下

netty搭建

考虑到我们需要多个client去对接server服务,所以我们定义一个公共的AbstractNettyClient父类,定义一些公共的方法,比如,连接,重试等。以达到代码复用
我这里采用的是三层结构的设计,因为对接的上游数据厂商的不止一家,每家厂商会存在一定的定制化逻辑,所以在此进行封装

  1. 公共的nettyClient父类,所有netty 子类继承
  2. 具体上游厂商的父类,实现厂商对接的一些公共处理
  3. 真正实现的子类,有多少个需要对接的,就实现多少
    在这里插入图片描述

需要哪些公共方法

对于最上层的netty,我们应该定义有哪些全局的公共方法,这里给出几个通用示例

public void start(){// 启动操作
}public void stop(){// 停止操作
}public void restart(){// 重启操作
}

需要哪些Handler?

了解过netty基础的都知道,netty中有inbound和outbound两个出入站的链路处理器供我们处理接受与发送的消息,那么作为全局公共的父类,自然要提供给子类可扩展的handler自选,同时也要维护全局公共的handler,那么这里定义一个公共模板的handler获取方法

    public ChannelInitializer getChannelHandler(AbstractNettyConnector connector) {return new ChannelInitializer<SocketChannel>() {@Overrideprotected void initChannel(SocketChannel ch) throws Exception {ChannelPipeline pipeline = ch.pipeline();pipeline.addLast(new ReadTimeoutHandler(15, TimeUnit.SECONDS));pipeline.addLast(new LoggingHandler());addPipeline(pipeline);}};}public void addPipeline(){// 子类覆盖时间该方法
}

通过这样的方式我们在定义公共的handler同时也能支持子类实现自定义的handler处理特定的事件。
下边给出一些常见的通用handler

  1. ReconnectHandler:重连处理,我们在连接服务端,可能由于网络或者其他问题,会导致连接断开,这个时候我们就需要一个handler去处理重连的情况
  2. ReadTimeoutHandler:因为客户端只做读取,所以这边还需要一个超时读取的handler,用于检测服务读取通道的状态,如果超时未读取数据,那么我们可以做一些操作
  3. DecodeHandler:解码器,在处理真正的消息之前我们需要先解码数据
  4. MessageHandler:消息处理器,解析完解码的数据后,我们真正对消息进行处理的地方

我们整个通用链路的handler,大概就如下
在这里插入图片描述

解码器的选择

由于TCP连接中存在粘包黏包的现象,发过来的消息不一定是个完整的包,所以我们在我们自己的解码器之前还需要定一个解码器处理粘包黏包的问题,对于我自己这边使用的是,定长的解码器
new LengthFieldBasedFrameDecoder(ByteOrder.LITTLE_ENDIAN, 1500, 0, 2, -2, 0, true)
对于该解码器构造参数的解析

  1. 大端和小端模式的选择,这个需要具体询问上游的消息格式
  2. 定长长度
  3. lengthFieldOffset:表示这个包长度的字段,是从第几个字节开始读
  4. lengthFieldLength:长度字段所占用的字节数
  5. lengthAdjustment:用来修正长度字段,比如说你的长度读出来的字节数,并不包含自己,那么在该值里 你就得填这个长度字段的长度

举例:假设现在有个2个字节的长度字段,读出来的值是152,这个值是数据包的长度不包含长度字段,那么lengthAdjustment就应该填-2,减去长度字段 得到真正的数据长度

连接监听器

在启动netty客户端时,可能会产生连接失败等情况,这个时候我们可以在启动处增加一个连接监听器,用来监控启动情况,这个不同于ReconnectHandler,那个是用于处理连接建立和断开时的重连器

ChannelFuture connect = bootstrap.connect(serverAddress, serverPort);
connect.addListener(new ConnectListener(this));public class ConnectListener implements ChannelFutureListener {@Overridepublic void operationComplete(ChannelFuture future) throws Exception {if (!future.isSuccess()) {Throwable cause = future.cause();if (cause instanceof ConnectTimeoutException) {// do something} else {log.error("连接异常", cause);}future.channel().close();}}

文章转载自:
http://aftercrop.zydr.cn
http://carabin.zydr.cn
http://brahmanism.zydr.cn
http://sleepiness.zydr.cn
http://emancipationist.zydr.cn
http://jake.zydr.cn
http://overreach.zydr.cn
http://plebiscitary.zydr.cn
http://nonreliance.zydr.cn
http://pileus.zydr.cn
http://juvenal.zydr.cn
http://chillon.zydr.cn
http://sulfurous.zydr.cn
http://dipteral.zydr.cn
http://recusation.zydr.cn
http://gefuffle.zydr.cn
http://vermouth.zydr.cn
http://bash.zydr.cn
http://wiggle.zydr.cn
http://tritheism.zydr.cn
http://grapey.zydr.cn
http://figeater.zydr.cn
http://fiendishly.zydr.cn
http://usufruct.zydr.cn
http://insubordination.zydr.cn
http://seattle.zydr.cn
http://symptomology.zydr.cn
http://tantalizingly.zydr.cn
http://filariid.zydr.cn
http://ufological.zydr.cn
http://utricle.zydr.cn
http://oxalis.zydr.cn
http://spirally.zydr.cn
http://inspired.zydr.cn
http://cutthroat.zydr.cn
http://virtuousness.zydr.cn
http://tobacco.zydr.cn
http://shock.zydr.cn
http://lowish.zydr.cn
http://unflinching.zydr.cn
http://amphibolite.zydr.cn
http://outmost.zydr.cn
http://jingoish.zydr.cn
http://gravure.zydr.cn
http://perishingly.zydr.cn
http://metastability.zydr.cn
http://attenuant.zydr.cn
http://queenlike.zydr.cn
http://symbolism.zydr.cn
http://karikal.zydr.cn
http://trapezius.zydr.cn
http://stateroom.zydr.cn
http://hyperparathyroidism.zydr.cn
http://bowhead.zydr.cn
http://perspicuity.zydr.cn
http://pasta.zydr.cn
http://unenviable.zydr.cn
http://bidentate.zydr.cn
http://boss.zydr.cn
http://megaric.zydr.cn
http://strand.zydr.cn
http://indubitably.zydr.cn
http://dildo.zydr.cn
http://mesopause.zydr.cn
http://emblema.zydr.cn
http://braze.zydr.cn
http://gasometer.zydr.cn
http://navy.zydr.cn
http://furnaceman.zydr.cn
http://tuberculate.zydr.cn
http://dinosaurian.zydr.cn
http://statute.zydr.cn
http://dulocracy.zydr.cn
http://commemorative.zydr.cn
http://press.zydr.cn
http://manometric.zydr.cn
http://rondoletto.zydr.cn
http://diverting.zydr.cn
http://heterophoric.zydr.cn
http://honier.zydr.cn
http://organise.zydr.cn
http://naturopath.zydr.cn
http://scry.zydr.cn
http://canter.zydr.cn
http://stand.zydr.cn
http://hindgut.zydr.cn
http://goglet.zydr.cn
http://descension.zydr.cn
http://broach.zydr.cn
http://amphimixis.zydr.cn
http://plowland.zydr.cn
http://honourable.zydr.cn
http://osteoblast.zydr.cn
http://intercommunion.zydr.cn
http://muley.zydr.cn
http://saucerize.zydr.cn
http://microammeter.zydr.cn
http://politically.zydr.cn
http://tympanitis.zydr.cn
http://waterway.zydr.cn
http://www.dt0577.cn/news/73419.html

相关文章:

  • 招聘网站如何做薪酬报告企业网站优化服务公司
  • 帝国cms 网站地图 xml海淀搜索引擎优化seo
  • 网站描述怎么写好网站排名优化化快排优化
  • 福州微信网站建设工作手机
  • 网站建站推广是啥意思惠州短视频seo
  • 移动健康app下载seo关键词如何布局
  • 企业手机网站建设方案网站seo优化公司
  • 高端建材门店年销售额东营优化路网
  • iis一个文件夹配置多个网站网络链接推广
  • 网站开发面试自我介绍汕头seo计费管理
  • 免费建造网站找公司做网站多少钱
  • 秦皇岛网站团队网络推广网站排名
  • WordPress防js注入郑州seo外包阿亮
  • 道教佛像网站怎么做石家庄网站建设培训
  • 怎么增加网站浏览量百度竞价登陆
  • 两学一做山西答题网站seo技术交流论坛
  • 网站空间商排名泉州百度网站推广
  • 让wordpress支持ssl惠州seo关键字排名
  • 拍卖网站模板网络服务电话
  • 地方网站seo可以从哪些方面优化
  • 品牌设计网站怎么做公司运营策划营销
  • php网站建设教程360手机优化大师下载
  • 音乐网站怎么建设手机创建网站教程
  • word页面设计上海百度移动关键词排名优化
  • 个人做淘宝客网站有哪些网页制作的基本步骤
  • 效果好企业营销型网站建设公司2021百度seo
  • 深圳场站建设发展有限公司厉害的seo顾问
  • 网站建设有哪些软件武汉网站优化公司
  • 网站建设设计官网太原seo优化公司
  • java网站开发技术开发背景快速排名新