游戏电视苹果数码历史美丽
投稿投诉
美丽时装
彩妆资讯
历史明星
乐活安卓
数码常识
驾车健康
苹果问答
网络发型
电视车载
室内电影
游戏科学
音乐整形

netty系列之使用netty搭建websocket客户端

  简介
  在网速快速提升的时代,浏览器已经成为我们访问各种服务的入口,很难想象如果离开了浏览器,我们的网络世界应该如何运作。现在恨不得把操作系统都搬上浏览器。但是并不是所有的应用都需要浏览器来执行,比如服务器和服务器之间的通信,就需要使用到自建客户端来和服务器进行交互。
  本文将会介绍使用netty客户端连接websocket的原理和具体实现。浏览器客户端
  在介绍netty客户端之前,我们先看一个简单的浏览器客户端连接websocket的例子:创建连接constsocketnewWebSocket(ws:localhost:8000);开启连接socket。addEventListener(open,function(event){socket。send(没错,开启了!);});监听消息socket。addEventListener(message,function(event){console。log(监听到服务器的消息,event。data);});
  这里使用了浏览器最通用的语言javascript,并使用了浏览器提供的websocketAPI进行操作,非常的简单。
  那么用netty客户端实现websocket的连接是否和javascript使用一样呢?我们一起来探索。netty对websocket客户端的支持
  先看看netty对websocket的支持类都有哪些,接着我们看下怎么具体去使用这些工具类。WebSocketClientHandshaker
  和websocketserver一样,client中最核心的类也是handshaker,这里叫做WebSocketClientHandshaker。这个类有什么作用呢?一起来看看。
  这个类主要实现的就是client和server端之间的握手。
  我们看一下它的最长参数的构造类:protectedWebSocketClientHandshaker(URIuri,WebSocketVersionversion,Stringsubprotocol,HttpHeaderscustomHeaders,intmaxFramePayloadLength,longforceCloseTimeoutMillis,booleanabsoluteUpgradeUrl)
  参数中有websocket连接的URI,像是:ws:flydean。commypath。
  有请求子协议的类型subprotocol,有自定义的HTTPheaders:customHeaders,有最大的framepayload的长度:maxFramePayloadLength,有强制timeout关闭的时间,有使用HTTP协议进行升级的URI地址。
  怎么创建handshaker呢?同样的,netty提供了一个WebSocketClientHandshakerFactory方法。
  WebSocketClientHandshakerFactory提供了一个newHandshaker方法,可以方便的创建各种不同版本的handshaker:if(versionV13){returnnewWebSocketClientHandshaker13(webSocketURL,V13,subprotocol,allowExtensions,customHeaders,maxFramePayloadLength,performMasking,allowMaskMismatch,forceCloseTimeoutMillis);}if(versionV08){returnnewWebSocketClientHandshaker08(webSocketURL,V08,subprotocol,allowExtensions,customHeaders,maxFramePayloadLength,performMasking,allowMaskMismatch,forceCloseTimeoutMillis);}if(versionV07){returnnewWebSocketClientHandshaker07(webSocketURL,V07,subprotocol,allowExtensions,customHeaders,maxFramePayloadLength,performMasking,allowMaskMismatch,forceCloseTimeoutMillis);}if(versionV00){returnnewWebSocketClientHandshaker00(webSocketURL,V00,subprotocol,customHeaders,maxFramePayloadLength,forceCloseTimeoutMillis);}
  可以看到,根据传入协议版本的不同,可以分为WebSocketClientHandshaker13、WebSocketClientHandshaker08、WebSocketClientHandshaker07、WebSocketClientHandshaker00这几种。WebSocketClientCompressionHandler
  通常来说,对于webSocket协议,为了提升传输的性能和速度,降低网络带宽占用量,在使用过程中通常会带上额外的压缩扩展。为了处理这样的压缩扩展,netty同时提供了服务器端和客户端的支持。
  对于服务器端来说对应的handler叫做WebSocketServerCompressionHandler,对于客户端来说对应的handler叫做WebSocketClientCompressionHandler。
  通过将这两个handler加入对应pipline中,可以实现对websocket中压缩协议扩展的支持。
  对于协议的扩展有两个级别分别是permessagedeflate和perframedeflate,分别对应PerMessageDeflateClientExtensionHandshaker和DeflateFrameClientExtensionHandshaker。
  至于具体怎么压缩的,这里就不详细进行讲解了,感兴趣的小伙伴可以自行了解。netty客户端的处理流程
  前面讲解了netty对websocket客户端的支持之后,本节将会讲解netty到底是如何使用这些工具进行消息处理的。
  首先是按照正常的逻辑创建客户端的Bootstrap,并添加handler。这里的handler就是专门为websocket定制的client端handler。
  除了上面提到的WebSocketClientCompressionHandler,就是自定义的handler了。
  在自定义handler中,我们需要处理两件事情,一件事情就是在channelready的时候创建handshaker。另外一件事情就是具体websocket消息的处理了。创建handshaker
  首先使用WebSocketClientHandshakerFactory创建handler:TestSocketClientHandlerhandlernewTestSocketClientHandler(WebSocketClientHandshakerFactory。newHandshaker(uri,WebSocketVersion。V13,null,true,newDefaultHttpHeaders()));
  然后在channelactive的时候使用handshaker进行握手连接:publicvoidchannelActive(ChannelHandlerContextctx){handshaker。handshake(ctx。channel());}
  然后在进行消息接收处理的时候还需要判断handshaker的状态是否完成,如果未完成则调用handshaker。finishHandshake方法进行手动完成:if(!handshaker。isHandshakeComplete()){try{handshaker。finishHandshake(ch,(FullHttpResponse)msg);log。info(websocketHandshake完成!);handshakeFuture。setSuccess();}catch(WebSocketHandshakeExceptione){log。info(websocket连接失败!);handshakeFuture。setFailure(e);}return;}
  当handshake完成之后,就可以进行正常的websocket消息读写操作了。websocket消息的处理
  websocket的消息处理比较简单,将接收到的消息转换成为WebSocketFrame进行处理即可。WebSocketFrameframe(WebSocketFrame)msg;if(frameinstanceofTextWebSocketFrame){TextWebSocketFrametextFrame(TextWebSocketFrame)frame;log。info(接收到TXT消息:textFrame。text());}elseif(frameinstanceofPongWebSocketFrame){log。info(接收到pong消息);}elseif(frameinstanceofCloseWebSocketFrame){log。info(接收到closing消息);ch。close();}总结
  本文讲解了netty提供的websocket客户端的支持和具体的对接流程,大家可以再次基础上进行扩展,以实现自己的业务逻辑。
  本文的例子可以参考:learnnetty4本文已收录于http:www。flydean。com25nettywebsocketclient
  最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧等你来发现!
  欢迎关注我的公众号:程序那些事,懂技术,更懂你!

哈利贝瑞奥斯卡被强吻画面感超强一脸懵逼满脑子的TMD生活中总是会发生各种各样不可预知的事情。毕竟生活是没有彩排的。无论是好的坏的或者是奇葩的令人难以想象的事情都是有可能会发生的。而在突发状况之下很多人当时都会处于一种懵逼的状态。……陈乔恩个人资料简历大龄剩女找到真爱反被粉丝唱衰娱乐圈中的ldquo;大龄剩女rdquo;还真是不少呢,除了公开表示没有恋爱结婚打算的女明星之外,剩下一些有恋爱想法的女明星就成为了大家的催婚对象,但想要找到合适的另一半哪有那……十宗罪蜗牛人图片做事情慢的人会变成蜗牛人很恐怖十宗罪蜗牛人图片是什么?蜗牛人其实是日本的很著名的恐怖小说家伊藤润二的作品,这个内容是在他的作品《漩涡》中的一个片段,故事很恐怖的,做事情慢的人会变成蜗牛人很恐怖,他们因为受到……抖音故意走光视频怎么回事炒作这两个字的含义太深不得不说抖音至今还是非常火爆的视频直播平台。自从2018年开始抖音不仅占据了完全的流量,而且也占据了全民的日常生活。平日里很多人都会有事没事刷一下抖音。似乎已经变成了一种习惯。……海外财经媒体焦点OPEC不理会白宫施压拒绝扩大增产力度财联社11月5日讯,隔夜,海外市场聚焦全球经济以及公司动态。全球经济方面,美国贸易逆差创纪录,受出口下滑打击;英国央行意外按兵不动,交易员大幅下调加息预期。公司动态方面,贝佐斯……释明心法师个人资料这么快出师是个好学的人释明心法师虽然是一位僧人,但是他的网络知名度却非常的高,虽然不是很明白他是怎么火起来的,不过对于他的长相却大家的评论一致,都是只有褒奖。释明心法师个人资料其实一点都不复杂,大学……Playstation5上具备诗意的游戏,我用诗意的语言来讲谁在我脑中发出呼喊,古老的爬虫脑顺着冰冷的脊椎蔓上脑海。我听到他用了八千年的时光发来了第一声的低吼,嘿。于是所有的意识都开始苏醒,他们拉着我沉入到思绪的海底,强迫我……关秀媚最大尺度的电影为求突破拍片奈何火不过邱淑贞早期的香港女演员有很多都是参加港姐选秀才出道进入娱乐圈的,所以ldquo;香港小姐rdquo;这个平台给娱乐圈输入了很多优秀漂亮的美女,关秀媚就是其中一位的,但对比其他参加港姐……网红郭老师全网封禁,直播行业是否在改革?2021年9月2日成名于某著名短视频平台的郭老师受到平台封禁,信息内容为:不符合社区规范。所谓的郭老师生于1994年妹子,并非偶像派,而是她个人的作风让广大网友认为真性情……390元英特尔至强E3八代6核心处理器,免费送显卡功耗30W本期文章的主角处理器代号是QNTM。为8代至强E32126G的ES版本。大黄鱼二手价格仅300多元,全新散片一年质保的价格也就400出头。大男孩和E3神教的新……奚梦瑶生了几个赌王长孙是嫡还是庶出最近赌王的大家庭中已经是分割好了遗产,那么最终得到人们保障的还是二房,本身就是有背景,家里的背景是除了大房之外,其他几房无法相比,只是四太的家里人一直是出现在媒体的眼中,是想要……高小淑聊天记录完整版三口七肛内容令人汗颜河南工大高小淑事件被曝光之后引来了不少网友的关注。被前男友公开的现男友的大尺度聊骚对话截图。让他们这种不堪的关系暴露无疑。在网上立刻引起了大家的关注。令人没有想到校园中也会发生……
元宇宙火了?有人10天收入160万元,是风口还是虎口?我认为是虎口,普通人不要参与。元宇宙(Metaverseicon)是一个虚拟时空间的集合,由一系列的增强现实(AR)、虚拟现实(VR)和互联网(Internet)所组成。……独家阿里内部新增员工关怀制度曝光,推7天全薪陪伴假新京报贝壳财经讯(记者程子姣)12月14日,新京报贝壳财经记者从阿里巴巴内部获悉,今日阿里巴巴在内网公布了多项针对员工关怀的暖心计划,包含多项员工福利升级除率先响应国家号召延长……新颐小白pro空气净化器除甲醛效果怎么样?净化效果挺好的,某机构曾对市面上包括新颐小白PRO等31款空气净化器进行了横评,经过广州市微生物研究所等第三方专业检测机构检测,发现个别产品标称值与实测值偏差过大,存在虚标现象……苹果混合现实头显将专注三大功能财经网科技12月6日讯,据新浪科技消息,苹果增强现实和虚拟现实头显设备将专注于游戏、媒体消费和沟通交流。格曼经常精确披露苹果计划的相关信息,他阐述了用户可以期待苹果的增强……TCL98巨幕大屏已收到!大屏电视只选TCL,这个售后服务真我本身也是一位女性,所以我对家电产品的话我是希望越方便越好,我入手的是这款机型是TCL98Q6E,TCL的专业师傅确实让我省了很多事情,下单后会有专门的售后给我打电话约我有空的……买红米K50还是iPhoneSE3?不吹不黑,分析各自优缺后今年三月份,手机圈可谓百花争艳,为了抢占市场空间,主流手机厂商都在争先恐后地发布自家的旗舰手机。红米、荣耀、苹果、OPPO都不例外。在新品批量涌现的情况下,某些厂商似乎顶不住市……挣脱吸血的信息茧房才能消除算法霸权日前,中国青年报社社会调查中心联合问卷网,对1144名受访者进行的一项调查显示,75。3的受访者曾被算法推荐服务困扰过。56。1的受访者关注《互联网信息服务算法推荐管理规定》。……1nm芯片有望?台积电接连传来两个消息,证实任正非的决策是对了解更多科技资讯尽在圈聊科技。今天跟大家聊一聊:1nm芯片有望了?台积电接连传来两个消息,都证实任正非决策是对的!在全球进入到全面的缺芯状态之后,各个半导体企业面对……如何注销手机号?谢谢邀请,由于具体业务内容有差异,请先通过当时办业务时的地方的热线咨询清楚,问清楚后再去营业厅办理。因为有可能需要机主走下注销流程,有的它也不需要,没什么影响,前提是必须问清楚……21新出行丨滴滴将与广汽埃安共同研发无人驾驶新能源车型5月17日,广汽埃安新能源汽车有限公司(以下简称广汽埃安)宣布与滴滴旗下自动驾驶公司达成战略合作,双方将开发一款可投入规模化应用的无人驾驶新能源车型,并全速推进量产。据悉……浅谈风控的架构其实不同行业,不同领域的风控还是有很大区别的,这里只针对典型刷量,刷榜,不当获利等类型的网络行为,进行风控体系的一些基本架构。当然,时代与时俱进,有些新的思路可能已经超出……在微粒贷借钱可靠吗?很多人都知道,微信微粒到的出现就是一个奇迹,奇迹的让微信亿万用户无语,因为很多用户只是听说微粒贷,却一直无法体验。众所周知,微信是看到支付宝借呗、花呗在互联网金融领域祛痘……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网