欢迎来到天天文库
浏览记录
ID:31192014
大小:71.00 KB
页数:3页
时间:2019-01-07
《netty教程—part2—创建channel连接-java开发java经验技巧》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、Netty教程一Part2—创建Channel连接-Java开发Java经验技巧Netty教程一Part2—创建Channel连接木文由ImportNew・刘海波翻译自seeallhearall.blogspoto欢迎加入翻译小组。转载请见文末要求。本文是Netty教程的第二篇。Channel不是直接被创建的,而是通过ChannelFactory来创建。ChannelFactory有2种类别,一种用来实现客户端Channel,另一种用于服务器端的Channel。对于这2种分类,都有不同的实现类来处理相应的I/O通讯协议:•TCP?NlO?Channels:?NioClientS
2、ocketChannelFactory?>FU?NioScrvcrSockctChannclFactory•UDP?NIO?Channels:?NioDatagramChannelFactory•TCP?OIO?Channels:?OioClientSocketChannelFactory和OioServerSocketChannelFactory•UDP?OIO?Channels:?OioDatagramChannelFactoryUDP的ChannelFactory在客户端和服务器端的实现相同的,因为UDP是无连接I■办议。还冇其他2种类型:•HTTP?客户端:??Http
3、TunnelingClientSocketChannelFactory:?这个ChannelFactory能够方便地生成channel用于通过指定的Netty?Servlet来?连接Netty服?务器。•Local?Channels:?DefaultLocalClientChannelFactory?和?DefaultLocalServerChannelFactory?分别是客丿端和服务器端In-VM类?型的Channel组?件,这种Channel貌似是网络Channel实际上是在同一个JVM屮来处理调川。这样在某些情况下,木地请求可以通过统一的Channel抽象接口被分发、处
4、理。在本篇闿客中主要涉及TCP?NTO?Channel,?但是要注意创建不同ChannelFactory的方式上有细微的弟别。TCP?N10?ChannelFactory的构造方法使用相同类型的参数,述冇一些重载方法。基本上,这个Factory需?要2个?线程池/Executors:•Boss线程:由这个线程池提供的线程是boss种类的,用于创建、连接、绑定socket,然后把这些socket传?给worker线程池。在服务器端每个监听的socket都?冇一个boss线?程來处理。在客户端,只有一个boss线程來处理所有的socketo•Worker线程:Worker线?程执行
5、所有的异步I/O。?他们不是通用的线程,开发人员需耍注意不要把与具不同的任务赋给线程,这可能导致线程被阻塞、无法处理他们真正关心的任务,反过来会导致死锁和一些莫名其妙的性能问题。在客户端只有一个boss线程,为什么NioClicntSockctChemnclFEictory还需要一个Executors?1.boss线程能够被延迟加载,而H•没冇任务需要处理的时候可以被释放,但是在线程池屮保留少量的线程比在需要的时候创建一个新的线程、然示在空闲的时候销毁它更有效率。2.还有可能多个不同的ChannelFactory被创建,应该讣这些ChannelFactory共用一个线程池,而不
6、是每个工厂独享一个线程池。因为NIO?ChannelFactory是唯一可以杲步的处理socket连接、服务器端socket的绑定,所以是唯一使用boss线?程池的ChannelFactoryo?其他的种类有的使用虚拟连接(Local),有的是同步的连接(010)?或者无状态连接(UDP)。IlttpTunclingClicntSockctCharrnclFactory是客户端socket?CharrnclFactory的简单封装,是否使用boss线程是可选的,而月.也没给它配置boss线程。关于ChannelFactory需要注意:在Netty中处理逻辑的过程中,Channe
7、lFactory需要申请资源,包括线程池。如果使用ChannelFactory之?后,一定要调用它的releaseExternalResources()方?法來保证它申请的所冇资源被释放。总Z,发送东西到一个监听状态的服务器:1.创建一个Channelo2.将Channel连接到远程监听的socket<>3.调丿IJChannel的write(Object?message)方法。传对象到Channel很灵活?不是如此,如果按照下面的方式做会出现什么?channcl.write(ncwDatc
此文档下载收益归作者所有