在线书籍

网络知识目录

java-io-overview2

java网络编程的学习路线:

  在理解了Java并发编程技术后再看网络编程,
  1. 首先要对计算机网络有一定的了解(TCP/IP, HTTP相关知识点)
  2. 其次要了解Socket的使用及原理,
  3. 然后再去了解NIO的相关API,
  4. 多写一些客户端和服务端通迅的DEMO,
  5. 为了更好理解网络编程,还要去了解UNIX网络编程模型,这是不管使用Java或c++,都必须要了解的
  6. 为了更好理解Java网络编程需要,需要了解TOMCAT的实现原理
  7. Netty也必须了解,并用这一网络框架进行编程,还可以看看它的源码
幕课网---Web协议详解与抓包实战 Linux 网络命令必知必会之 tcpdump,一份完整的抓包指南请查收
Java 全栈知识体系---Java IO知识体系详解
精尽计算机网络学习指南 计网 IP 知识全家桶,45 张图一套带走 Java IO知识体系详解
Java IO知识体系详解
不了解NIO你好意思说自己是Java程序员? 我见过最清晰的总结,一键搞定Netty难关,看到NIO再也不犯糊涂了
吐血整理所有常用端口,不全你来打我!

I/O网络通信框架的发展历程:

ServerSocket与Socket入门详解 Socket编程实践模拟通信

单服务器采取的网络编程模型原理

 单服务器高性能的关键之一就是服务器采取的网络编程模型,网络编程模型有如下两个关键设计点:
   
   (l)服务器如何管理连接
   (2)服务器如何处理请求

  以上两个设计点最终都和操作系统的I/O 模型及进程模型相关。
  
  (1) I/0 模型:阻塞、非阻塞、同步、异步。
  (2)进程模型:单进程、多进程、单线程,多线程。

BIO

同步阻塞⽅式(BIO),客户端每发⼀次请求,服务端就⽣成⼀个线程去处理。当客户端同时发起的请求很多时,服务端 需要创建很多的线程去处理每⼀个请求,如果达到了系统最⼤的线程数瓶颈,新来的请求就没法处理了。

NIO

同步⾮阻塞⽅式 (NIO),客户端每发⼀次请求,服务端并不是每次都创建⼀个新线程来处理,⽽是通过I/O多路复⽤技术 ⾏处理。就是把多个I/O的阻塞复⽤到同⼀个select的阻塞上,从⽽使系统在单线程的情况下可以同时处 理多个客户端请求。这种⽅式的优势是开销⼩,不⽤为每个请求创建⼀个线程,可以节省系统开销。

AIO

异步⾮阻塞⽅式(AIO),客户端只需要发起⼀个I/O操作然后⽴即返回,等I/O操作真正完成以后,客户端会得到I/O操作完 成的通知,此时客户端只需要对数据进⾏处理就好了,不需要进⾏实际的I/O读写操作,因为真正的I/O读取或者写⼊操作已 经由内核完成了。这种⽅式的优势是客户端⽆需等待,不存在阻塞等待问题。

网络视频

有用的参考