Java BIO、NIO建立HTTP Server之对比

之前用Java的BIO在Android平台上建立了一个HTTP Server,可以上传和下载文件,但是感觉上交互的效率不是很高,
速度上不是很够,BIO的代码就不贴了,相似的实现网络上已经很多了。于是就研究了一段时间的NIO,简单说说NIO与BIO的不同之处吧:

BIO 是对字节进行读取,NIO 是对缓冲区进行读取
BIO 是一个连接一个线程,线程数多,NIO 则是一个请求一个线程,也就是有数据的时候才需要建立线程
BIO 适合大量数据传输,NIO 则适合高并发

使用NIO建立文件上传服务器遇到了很大的阻碍,不知道如何接受分片上传的文件,问题很大,如下是我遇到的一些问题

无法标识文件上传是否结束,因为前端是分片上传文件的,而HTTP 长连接会导致几个上传的都是同一个socket,异步上传中可能标识文件上传完成的报文比正常的文件报文还早发送到服务器,尤其是标识文件上传完成的报文的内容短,读取快
如果只新建一个ByteBuffer用于传输,那么只能适合于单线程的情况,但是这种情况容易导致部分报文传输时间过长则失败
对每个线程创建一个ByteBuffer则内存过大
NIO的每次read方法不一定能够读到所有的数据,需要多次读取

总而言之,NIO 适合做聊天服务器、游戏服务器等高并发、数据量小的情况,如果用在上传下载服务器这类大io的情况下,还是传统的BIO比较适合。

以下是一些有关于HTTP Server的文章,可以参考阅读:
HTTP Server漫谈
Java nio 建立HTTP Server
NanoHttpd 安卓HTTP Sever建立

猜你喜欢

转载自blog.csdn.net/qq_34911465/article/details/79473340