- 1、本文档共5页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
java nio Selector的使用 服务器端
java nio Selector的使用 服务器端
java nio Selector的使用-服务器端
前些时候花了一些时间在研究java.nio的api使用机制,看了好久,也觉得不习惯它的使用方式和用法.毕竟自己对C语言了解太少,也不太了解C语言在网络编程上的用法。对这种底层下的编程太不习惯,还是应该好好了解下底层的东西,要不然就光会使用别人的东西,如果是自己写一个,就写不出来了。
从java1.4以来,java nio就出现在java的api中,在日常的使用当中,基本上都是围绕着java.io中的几个inputStream(outputStream)和reader(writer)在转,要想编写一些其他形式的调用,还真不会。我也看了下必威体育精装版的springframework中的FileCopyUtils中的代码,也是将各种操作集合给java.io来做。好像java.nio用得不是很多。看了下java.nio的描述信息,感觉这是用在网络编程上的。比如文件下载服务,通信服务等地方。自己暂时还用不上网络上的编程,不过等到用的时候还去学,就太晚了。
看了下关于Selector的使用方法,官方的说法是一个多路复用器,从我自己的角度来讲就感觉像一个服务总线,负责统一各个处理程序的消息注册,统一接收客户端或服务器消息信息,再分发给不同的事件处理程序进行处理。整个流程就一个注册-接收-处理的过程,从使用者的角度来讲,直接使用这些api还不太成熟,毕竟这些api都太底层了,需要了解太多的技术细节,也不太适合像我这种不了解C语言网络编程的人。这周花了三天的时候专门研究了下整个java.nio包,重点看了下关于Selector的运用(datagram和pipe还不太会用),结合了网络上的很多例子(尤其是《java nio》这本书上的例子),对selector总算有了很大的认识,对底层的io编程也有了新的了解。
写了个模拟下载的例子,服务器端模拟一个拥有整个硬盘资源的处理程序。客户端通过发送要下载的文件(通过完整文件路径),从而实现由服务器写文件到客户端,客户端保存接收的整体流程。其中,仅涉及到了数据传输的基本运用,即没有运用到网络编程上的urlConnection,也没有用到专门的socket,客户端也没有实现一个文件多线程下载的机制。仅仅作为一个selector的下载练习使用(当然,如果要求不高,也可以用到实际编程的)。
服务器端基本思路就是打开链接,绑定端口,接收信息,处理信息。详细过程如下:
第一步:创建服务器端socketChannel,并绑定指定端口,注册到selector上。
Java代码selector=Selector.open();ServerSocketChannel serverSocketChannel=ServerSocketChannel.open();serverSocketChannel.configureBlocking(false);serverSocketChannel.socket().bind(new InetSocketAddress(1234));serverSocketChannel.register(selector,SelectionKey.OP_ACCEPT);都是标准的步骤,先open,再配置block为异步的,服务器socket绑定本机端口,注册到selector上,并指定key为ACCEPT。
第二步:接收消息,处理信息咯。
Java代码for(;;){selector.select();Iterator SelectionKey keyIterator=selector.selectedKeys().iterator();while(keyIterator.hasNext()){SelectionKey key=keyIterator.next();if(key.isValid())handle(key);keyIterator.remove();这也是标准步骤,先进行select,再获得selectedKey,迭代,处理,再remove掉。
在网上,看到有些例子中,对selector.select()中返回的值进行判断,如果返回为o则continue,在我这个程序中,经测试当selector.select()返回为0时,而selector.selectedKeys()确不为0,这样就没有处理信息了。从官方doc上来看,关于select()的返回值解释为已更新其准备就绪操作集的键的数目,该数目可能为零,即这个数目指已更新的键集,故在处理中可能键集没有更新,而选择的消息处理keys却不为0,这种情况是正确的。不清楚是不是这个意思,还望高人来解释一下。
第三步:就是handle方法了,处理消
您可能关注的文档
- 20m、35m箱梁预应力张拉计算书.doc
- 20万温州商人给苏州的启示.doc
- 20世纪福克斯公司特刊.doc
- 20岁以上的女生。要有成人的视觉,理性的智慧。如何气.doc
- 20招教你打造通透大气家 小户型经典设计.doc
- 20种学生必备软件.doc
- 21种方式让你玩转三亚.doc
- 21世纪公司的组织结构.doc
- 220kv及以下软母线装置安装技术.doc
- 220kV输变电线路工程总承包合同(15页).doc
- 中考语文总复习语文知识及应用专题5仿写修辞含句子理解市赛课公开课一等奖省课获奖课件.pptx
- 湖南文艺版(2024)新教材一年级音乐下册第二课《藏猫猫》精品课件.pptx
- 湖南文艺版(2024)新教材一年级音乐下册第三课《我向国旗敬个礼》精品课件.pptx
- 高中生物第四章生物的变异本章知识体系构建全国公开课一等奖百校联赛微课赛课特等奖课件.pptx
- 整数指数幂市公开课一等奖省赛课微课金奖课件.pptx
- 一年级音乐上册第二单元你早全国公开课一等奖百校联赛微课赛课特等奖课件.pptx
- 八年级数学上册第二章实数27二次根式第四课时习题省公开课一等奖新课获奖课件.pptx
- 九年级物理全册11简单电路习题全国公开课一等奖百校联赛微课赛课特等奖课件.pptx
- 八年级语文下册第五单元19邹忌讽齐王纳谏省公开课一等奖新课获奖课件.pptx
- 2024年秋季新人教PEP版3年级上册英语全册教学课件 (2).pptx
最近下载
- 2024年宝鸡职业技术学院单招职业技能测试题库及完整答案1套.docx VIP
- 网上支付与安全教学设计 教案全套 1-网上支付与安全概述---11-网络金融.doc
- 2024零碳城市建设评价指南.docx
- 物业小区安全隐患排查及整改措施.docx VIP
- 2025年新疆事业单位招聘考试时间及计划申报笔试备考题库及答案解析.docx
- 2024昆十中教育集团·白塔中学夏季教师及专职员工招聘(18人)笔试备考题库及答案解析.docx
- 2024年宝鸡职业技术学院单招职业技能测试题库完整答案.docx VIP
- TCRHA-床旁超声评估压力性损伤技术规范.pdf
- 一种攀爬机器人用夹爪.pdf VIP
- 06互联网营销师-通用知识第6章-客户关系管理.pptx
文档评论(0)