`

Netty使用总结(未完待续)

 
阅读更多

在使用网络编程的时候,前提要明白TCP/UDP协议相关内容

 

TCP协议:计算机网络中传输层的一个面向连接、保证数据可靠性、有序性的一个协议,因为它的可靠性特点(传输过程中保证不丢包),应用层的如FTP、HTTP等协议的下一层都使用的是TCP进行传输。

 

UDP协议:同样是传输层的一个无连接,不保证可靠性的一个协议,它的特点是在传输过程中无需三次握手,所以,相比TCP协议的话,它的效率更高,在某些应用程序在允许丢包的情况下,都是用的是UDP协议,如视频,音频等应用程序,丢失少量的包并不影响效果。

 

TCP协议的几个关键点:

 

 

 

 

 

注意:

  1. 在网络中,要考虑到丢包的问题。
  2. 在成功建立连接之后,就没有服务端和客户端之分,两者都可以进行传输和接收数据
  3. TCP连接是”全双工传输“,即:客户端和服务端可以同时进行接收和发送数据。
  4. 长连接和短连接的区别就是,长连接在三次握手连接之后,没有释放掉连接,下次传输可以直接传输;而短连接是在三次握手之后,数据传输完成,就关闭连接,典型的HTTP协议采用的就是短连接。
  5. 建立的每一个连接(linux中称为文件句柄),都会占用一个线程,消耗一些内存资源,所以在使用完毕之后,如果没用,就要及时关闭连接
  6. 传输的过程都是以字节(byte)流进行传输的。

 ---------------------------------------------------Netty总结---------------------------------------------------

 

关键点:NIO 、 BIO 、AIO、buffer(缓冲区) 、 channel(通道)、inhandler/outhandler(处理器)、channlepipline、 编解码、 线程模型、非阻塞事件驱动模型、

 

BIO、NIO、AIO参考这里  http://ihenu.iteye.com/blog/2247618

 

 

 0.NIO核心

     channel、Selector、Buffer

 

 

1.网络编程中同步和异步的概念

 

同步:在进行发送或者接受数据的时候,一直等到数据发送或者接受完成的过程

异步:把数据发送到缓冲区立即返回,而发送或者接受成功的消息是通过事件来通知的(事件驱动程序),事件驱动程序利用到了回调的机制

 

 

 2.一个channel在一个生命周期之内,始终是由一个线程来负责的,所以不会涉及到同步的问题

 

 

 

 

3.Buffer

 

 

比JDK原生的ByteBuffer功能更强大,拥有读写索引,可以随机读写。动态扩容

 

1.heapBuffer:存储在堆区,实质是数组,如果访问非堆区的数组会报错。

2.directBuffer:性能更好,但是内存分配和释放比heap的复杂,所以使用了内存池来解决这个问题??不支持直接数组访问,可以间接的访问数组

3.compositeBuffer:像一个列表,可以动态的添加和删除其中的ByteBuffer,操作过程中不回导致内存泄露。作用是什么??

 

复合buffer、heapBuffer、directBuffer、

 

 

 

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics