《3种下载程序的比较—为何使用NIO进行异步网络通讯》.docVIP

《3种下载程序的比较—为何使用NIO进行异步网络通讯》.doc

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
《3种下载程序的比较—为何使用NIO进行异步网络通讯》.doc

3种下载文件程序的思考,为何使用NIO进行异步网络通讯 刘岩 Email:suhuanzheng7784877@163.com 前言 现在很多做网络通讯中间代理层的通讯都是使用Java1.4以后推出的NIO进行编写,现在还有很多开源的框架也是封装了NIO的书写细节来帮助大家简写异步非阻塞通讯服务。像MySql的代理中间件amoeba-mysql-proxy就是采用NIO的方式处理client端过来的request,之后与Mysql-Server层的通讯也是采用NIO进行命令消息发送的。再看咱们JavaEye首页介绍的项目xmemcached,其中作者Dennis是其xmemcached的开发人,他也是通过NIO的方式与memcached的Server进行异步通讯的,Dennis的另一个项目yanf4j就是一个NIO框架,xmemcache也是借助这个NIO框架实现的异步非阻塞方式的网络通讯,Apache的MINA框架都是NIO的封装再实现。 那么我们就来回顾一下以前的处理方式,来看看为什么现在要使用NIO来进行异步非阻塞方式的通讯吧,网上很多文章都是几句话将NIO和原始的socket通讯的优劣一带而过,我们这次用一个简单的下载大文件的网络服务程序进行说明。使用3种模式来说明,分别是同步单独线程服务运行模式、传统阻塞多线程模式、使用NIO异步非阻塞模式。 我们设置服务器上有一个1.81GB的电影,格式为RMVB。使用Server进行服务监听,客户端请求到Server,建立网络通讯,进行电影下载。 同步单线程阻塞 使用同步单线程下载,是最原始的socket通讯,服务端的代码如下 package server; import java.io.FileInputStream; import java.io.InputStream; import java.io.OutputStream; import .ServerSocket; import .Socket; /** * liuyan */ public class FilmServer { public static void main(String[] args) { FilmServer ms = new FilmServer(); try { ms.server(); } catch (Exception e) { e.printStackTrace(); } } /** * 服务器端响应请求 * * @throws Exception */ public void server() throws Exception { // 0.建立服务器端的server的socket ServerSocket ss = new ServerSocket(9999); while (true) { // 1.打开socket连接 // 等待客户端的请求 final Socket server = ss.accept(); System.out.println(服务-----------请求开始start); // 2.打开socket的流信息,准备下面的操作 final InputStream is = server.getInputStream(); byte b[] = new byte[1024]; int readCount = is.read(b); String str = new String(b); str = str.trim(); final String serverFileName = str; // 3.对流信息进行读写操作 System.out.println(客户端传过来的信息是: + str); System.out.println(线程 + Thread.currentThread().getName() + 启动); try { FileInputStream fileInputStream = new FileInputStream( serverFileName); // 3.1 服务器回复客户端信息(response) OutputStream os = server.getOutputStream(); byte[] bfile = new byte[1024]; // 往客户端写 while (fileInputStream.read(bfile) 0) { os.write(bfile); } f

文档评论(0)

ghfa + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档