范文健康探索娱乐情感热点
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

Netty基石,JavaNIO核心知识

  在深入 Netty 之前,我觉得有必要先对齐一下 Java NIO 的基础知识,因为 Netty 对底层网络 I/O 的操作就是基于 Java NIO 的,所以有必要了解一下。
  到时候看源码,会有很多概念,例如 Channel、Selector、SelectionKey、Buffer 等等,这篇我们就来了解下这些名词到底代表着什么,分别是什么意思。
  关于 Java NIO 相关的核心,总的来看包含以下三点,分别是:  Channel  Buffer  Selector  什么是 Channel
  翻译过来就是通道。
  我们可以往通道里写数据,也可以从通道里读数据,它是双向的,而与之配套的是 Buffer,也就是你想要往一个通道里写数据,必须要将数据写到一个 Buffer 中,然后写到通道里。
  从通道里读数据,必须将通道里的数据先读取到一个 Buffer 中,然后再操作。
  在 NIO 中 Channel 有多种类型:  SocketChannel  ServerSocketChannel  DatagramChannel  FileChannel  SocketChannel
  对标 Socket, 我们可以直接将它当做所建立的连接 。
  通过 SocketChannel ,我们可以利用 TCP 协议进行读写网络数据。  ServerSocketChannel
  可以对标 ServerSocket,也就是服务端创建的 Socket。
  它的作用就是监听新建连的 TCP 连接,为新进一个连接创建对应的 SocketChannel。
  之后,通过新建的 SocketChannel 就可以进行网络数据的读写,与对端交互。
  可以看到它主要是用来接待新连接,这功能主要就是服务端做的,所以叫 Server SocketChannel。 DatagramChannel
  看到 Datagram 应该就知道是 UDP 协议了,是无连接协议。
  利用 DatagramChannel 可以直接通过 UDP 进行网络数据的读写。  FileChannel
  文件通道,用来进行文件的数据读写。
  我们日常开发主要是基于这些 TCP 协议,所以我们把精力放在 SocketChannel 和 ServerSocketChannel 上即可。
  我们再回过头来继续看看 SocketChannel 和 ServerSocketChannel。
  SocketChannel 主要在两个地方出现:  客户端,客户端创建一个 SocketChannel 用于连接至远程的服务端。  服务端,服务端利用 ServerSocketChannel 接收新连接之后,为其创建一个 SocketChannel 。
  随后,客户端和服务端就可以通过这两个 SocketChannel 相互发送和接收数据。
  ServerSocketChannel 主要出现在一个地方:服务端。
  服务端需要绑定一个端口,然后监听新连接的到来,这个活儿就由 ServerSocketChannel 来干。
  服务端内常常会利用一个线程,一个死循环,不断地接收新连接的到来。  ServerSocketChannel serverSocketChannel    = ServerSocketChannel.open();  ...... while(true){   // 接收的新连接   SocketChannel socketChannel =       serverSocketChannel.accept();  ....... }
  至此,想必你应该清楚 ServerSocketChannel 和 SocketChannel 的区别和作用了。  Buffer
  Buffer 说白了就是内存中可以读写的一块地方,叫缓冲区,用于缓存数据。
  其实还真没啥好说的,最多就是讲讲 Java NIO Buffer 的 API。
  但讲 API 得太死板了,所以自己上网搜搜吧。我就告知一个结论,这个 API 很不好用,稍微漏写了点,就容易出错 bug,而且还有很多优化的之处,所以 Netty 没用 Java NIO Buffer 而是自己实现了一个 Buffer,叫 ByteBuf。
  等我们之后分析 ByteBuf 的时候再来盘一盘。现在你只需要知道 Buffer 主要用来缓存通道的读写数据即可。
  对了,看到这可能会有人提出疑问,为什么 Channel 必须和 Buffer 搭配使用?
  其实网络数据是面向字节的,但是我们读写的数据往往是多字节的,假设不用 Buffer ,那我们就得一个字节一个字节的调用读和调用写,想想是不是很麻烦?
  所以我们搞个 Buffer,把数据拢一拢,这样之后的调用才能更好地处理完整的数据,方便异步的处理等等。  Selector
  I/O多路复用的核心玩意。
  一个 Selector 上可以注册多个 Channel ,我们从上面得知一个消息 Channel 就对应了一个连接,因此一个 Selector 可以管理多个 Channel 。
  具体管理什么?
  当任意 Channel 发生读写事件的时候,通过  Selector.select()  就可以捕捉到事件的发生,因此我们利用一个线程,死循环的调用 Selector.select() ,这样可以利用一个线程管理多个连接,减少了线程数,减少了线程的上下文切换和节省了线程资源。
  这就是 Selector 的核心功能,然后我们再来细说具体是怎样管理的。
  首先,创建一个 Selector。  Selector selector = Selector.open();
  然后,你需要将被管理的 Channel 注册到 Selector 上,并声明感兴趣的事件。  SelectionKey key = channel.register(selector, Selectionkey.OP_READ);
  事件一共有以上四种类型,注册的时候可以同时对多种类型的事件感兴趣,例如:  SelectionKey key    = channel.register(selector,     Selectionkey.OP_READ | SelectionKey.OP_WRITE);
  这样,当这个 Channel 发生读或写事件,我们调用  Selector.select() 就可以得知有事件发生。
  具体 Selector.select() 有三个重载方法:  int selectNow(),不论是否有无事件发生,立即返回  int select(long timeout),至多阻塞 timeout 时间(或被唤醒),如果提早有事件发生,提早返回  int select(),一直阻塞着,直到有事件发生(或被唤醒)
  返回值就是就绪的通道数,一般判断大于 0 即可进行后续的操作。
  后续的操作就是调用:  Set selectedKeys = selector.selectedKeys();
  获得了一个类型为 Set 的 selectedKeys 集合,那这个 selectedKeys 又是啥玩意?
  我们来看一下它的方法和成员:
  看到这些成员,其实我们就很清晰了,我们可以通过 selectedKey 得知当前发生的是什么事件,有 isAcceptable、isReadable 等等。
  然后还能获得对应的 channel 进行相应的读写操作,还有获取 attachment 等等。
  所以得到了 selectedKeys 就可以 通过迭代器遍历所有发生事件的连接 ,然后进行操作。
  大致使用的代码如下所示:  while(true) {  int readyNum = selector.select();  if (readyNum == 0) {     continue;  }  Set selectedKeys = selector.selectedKeys();  Iterator keyIterator = selectedKeys.iterator();  while(keyIterator.hasNext()) {     SelectionKey key = keyIterator.next();     if(key.isAcceptable()) {         // a connection was accepted by a ServerSocketChannel.     } else if (key.isConnectable()) {         // a connection was established with a remote server.     } else if (key.isReadable()) {         // a channel is ready for reading     } else if (key.isWritable()) {         // a channel is ready for writing     }     keyIterator.remove(); //执行完毕之后,需要在循环内移除自己  } }
  还有个方法就是  Selector.wakeup() ,可以唤醒阻塞着的 Selector。
  对了还有一点没说,就是如果 Channel 要和 Selector 搭配,那它必须得是非阻塞的,即配置  channel.configureBlocking(false);
  从上面的操作,我们可以得知 Selector 处理事件的时候必须快,如果长时间处理某个事件,那么注册到 Selector 上的其他连接的事件就不会被及时处理,造成客户端阻塞。
  至此,想必你应该清晰 Selector 具体是如何管理这么多连接的了。
  参考:  https://ifeve.com/java-nio-all/

日媒二手电动车难找买家,中国共享电动汽车坟场仍在增加来源环球时报日媒中国共享电动汽车坟场仍在增加日本FridayDigital网站11月23日文章,原题在中国,共享电动汽车坟场正在快速增加目前,中国是全球最重要的电动汽车市场。在20魅族一直叫好不叫座,究其原因是什么?败于P7。在16系列可以从新雄起时,没货,专卖店加价500,失去了口碑和市场,早早巴魅蓝砍掉,失去占领低端市场和用户,现在又只做旗舰,又巴魅蓝激活,魅族迷一样的操作,本身品牌力度不从中国联想到联想中国,国企到人人喊打私企,联想到底怎么了?答中国联想,一个好端端的国企优秀企业,一步步地脱变成了外资控制的私人企业,这是中国的悲哀和失败。联想以中国的广大市场为外国资本家输血和套取利益,联想的高管已经从优秀企业家脱变成了买联想真的叫人来联想不断,还有断头贷,为什么不给大众一个解释?联想事件不断发酵,真会使人产生较多联想,我觉若想平息此事,联想就应出面解释吃瓜群众以下疑问公布相关集团和各下属子公司股权结构,看国有股份占多少?联想想上科创板,请公布科技研发投入占买手机首看性能,2021年公认性能最强的三款手机现在买手机,首看性能,任你花里胡哨的东西再多,带不起来一样白扯,但是手机性能现在也不能光以处理器来看,毕竟现在的手机承载了人生活中大部分的工具用途,我们今天就从使用性能(处理器屏幕苹果8plus,老年人必备神器,性能不用担心,放在现在依然能打之前我不是发了一个文章吗?说老年人不应该用一些千元机,因为性能太差了,用不了几年就要换,然后很多朋友都说直接买一个二手的苹果手机,然后我就仔细的琢磨一下,看中了这款苹果8p,其实大经典MP3播放器换代重生,全新设计Winamp将公开beta测试据官网消息,经典的Winamp播放器将迎来重大更新,会进行网站和LOGO的重新设计,并会在近期发布Beta版本供用户进行测试。不知道看到这个界面有没有让你的思绪回到10多年前,你曾联想的产品好不好看到有人在网上说联想的产品做的不好,东西怎么怎么不好用,我不知道是不是有人故意在抹黑联想,还是确有这事。但我还是有点发言权的,因为我买过联想的手机。记得是09年了,那时候我的旧手机拼多多淘宝上便宜的衣服敢给宝宝穿吗,这些衣服大多有毒可能不少妈妈最近都发现了,随着抖音直播拼多多以及淘宝的发展,不少商家在售卖低价的童装,能以低价买到高质量的衣服当然是好事,但是就怕一些有毒的童装。有些家长可能就会认为,孩子在成长期视频拍摄装备这么多,simorr让我最喜欢要说短视频是当下最流行的大众娱乐方式,估计没有人会反对,毕竟各大短视频平台如雨后春笋呈爆发式增长,主播网红大行其道,视频记录生活已经成为年轻人的一种潮流和生活方式,太多的人将其作为盘点古人留下来的未解之谜,古代是否已经有外星人了?史前文明,外星文明已来史前文明肯定有,神话传说未必假,远古有外星人也不足为奇,要知道人类有史文明也不过一万年而已,就算从古猿算起也不过二三百万年,而地球生命演化已有至少38亿年了,
深耕保险科技领域,i云保助力行业高质量发展当下,科技创新已经成为时代潮流和社会发展的风向标,科技的迅猛发展与不断渗透,赋能各行各业不断革新升级,保险行业也不例外。在保险科技这条赛道上,i云保作为互联网保险行业重要的探索者与iphone14开倒车?不支持A16120Hz刷新,刘海屏不变近期iphone14可以说未发先火,短短几个月内已经几次登上热搜。而近日iphone14又传来更多规格信息,那么该系列是否是你理想中的样子呢,一起来看下吧。早在上周,网上流传着一组专科生就一定比本科生差吗?差不多吧,但并不一定,但是未来的路更加辛苦一点。我是一个专科生,高考时,考上了二B(广东叫法,别的省可能叫三本),那时对一年学费1万五望而止步,所以放弃本科读了大专。毕业后,我觉得RedmiK50性价比高吗?值不值得买?Redmi的K系列算是Redmi这个品牌的旗舰系列了,主打的就是卓越的性能,以及奠定整个品牌调性的性价比。RedmiK50这次首发天玑8100处理器。这是一款台积电5nm工艺制程的更新后续航出问题?苹果回应来了,果粉怎么看?苹果这次在iPhone13系列上花费的心思估计应该是苹果手机产品中最多得了吧,先是调整市场发展策略,以加量不加价开头,在市场上一举获得了非常的好的高端市场表现情况,但是随之而来的就数码评测圈到底怎么了?这些现象你觉得正常吗?你发现了没有,现在的很多数码评测博主的内容,已经越来越没有什么看点了,这到底是为什么呢?是不是他们不敢说真话了呢?之前创业中的小王也说过类似的问题,说现在的数码评测博主,除了说说参投影仪该如何选?看好这六点就够了,一分钱一分货,不要贪图便宜随着科技的进步,想必大家都发现了,现代人看电视的频率是越来越低了。因此,不少人(尤其是年轻人)装修房子的时候都不再考虑安装电视,而是用投影仪来替代。投影仪对于他们来说,更为智能化也一部五年前的iPhone8Plus,放到2022年,算是什么级别的手机虽然现在这个时代,智能手机更新换代很快,但实际上很多人换手机并不是那么勤快,反而希望一部手机最好可以用好几年,一般对手机来说一年是个槛,大多数人三年差不多也换了,但是这部手机能撑五iPhone14基本情况曝光,芯片屏幕外观售价信息量大苹果公司的新品一直都是人们密切关注的焦点对象,无论褒贬,苹果公司可以说是数码行业的风暴中心,时时刻刻饱受关注,在2021年苹果推出iPhone13系列手机之后,苹果更是一跃走上了中vivo出万元手机了?短暂上架又秒删,前不久的传言被证实了近日,有网友爆料在vivo商城中发现了一款标价9999元的智能手机,型号为vivoXNote,不过很快又被删除了。从截图上看,这款vivoXNote采用晴山蓝配色,有12GB256乘数智之风,助阅读推广阅读是个人获取知识开阔视野增长智慧和提升人文素养的重要途径,同时其作为文化发展的外在表现,也是一个国家发展精神传承文明以及屹立于世界民族之巅的内生驱动力。顾名思义,阅读推广是社会组