Netty学习之数据传输
前言
在前面的小节中,我们简略地学习了Netty及Netty的核心组件,在本小节中,我们来学习一个重要但是不太好归类的内容,Netty的数据传输方式。
数据传输
在Netty中,Channel可以说是非常重要的一个组件了,数据之间的传递正是通过Channel来完成的。
在Netty中,Channel是线程安全的,所以一个Channel可以被其他线程引用,也可以在多线程环境下使用。
在Netty中,支持不同类型的传输方式,它们支持的协议不同,所以使用的时候需要选择合适的类型
- NIO,使用Java中的NIO包,非阻塞,基于选择器,Linux版本的JDK默认就是使用Epoll
- Epoll,使用JNI调用Epoll(),非阻塞,只有在支持Epoll的Linux内核中才能使用
- OIO,使用传统的OIO,基于阻塞形式的流
- Local,在同一个VM中使用管线进行通信
- Embedded,嵌入式,不需要真实的网络环境,一般用于测试用途
零拷贝,零拷贝是一种只能在NIO和Epoll传输方式中使用的特性,允许开发者快速地,高效地将数据从文件系统移动到网络接口,而不需要将其从内核空间拷贝至用户空间,能够极大地提高如FTP、HTTP等的效率,但是并不是所有的OS都支持,而且不能在加密的文件系统中使用,当然,传输加密了的数据块还是可以的。
总结
本小节的内容比较简单,主要是Netty的不同类型的数据传输方式,由于不同的OS对不同的传输方式支持程度不同,所以在使用的时候,需要根据情况选择,如果是Linux环境,并且内核支持Epoll,最佳的选择就是Epoll啦。