現在java的技術棧一般是spring+tomcat,好像不關網絡編程什么事兒。確實,由於網絡編程和具體的業務相對獨立,所以網絡被做成框架了,我們只要使用就好,但是作為要靠技術吃飯的程序員,還是有必要了解網絡編程的。
java中設計網絡編程的包有java.net和java.nio。其總的類有:
Socket是TCP客戶端API,通常用於連接遠程主機
ServerSocket是TCP服務端API,通常接受源於客戶端套接字的連接
DatagramSocket是UDP端點API,用於發送和接受數據包
MulticastSocket是DatagramSocket的子類,在處理多播組時使用
具體怎么使用呢?無非就是服務端和客戶端的通信,socket和serverSocket。拿到socket對象,就可以獲得輸入流和輸出流,分別對應了請 求和返回的報文。注意這時,使用get,post等方法是無效的,此時還未涉及到http協議。
寫了一個簡單的client和server端,然后測試了一些特性,對於Socket通信比較熟悉了。但是Socket通信的一個特點就是read方法和write方法是阻塞的,想要同時響應多個請求,只能使用多線程操作。於是就有了SocketChannel,非阻塞的socket,read,write,connect都是非阻塞的,這個時候就要考慮同步的問題了。
EventLoop是管理Channel的,比如IO連接上了,IO斷開了,都可能通過事件管理。
Pipeline是ChannelHandler的容器,ChannelHandlerContext表示了Pipeline和Handler的關系。
參考文章:https://blog.csdn.net/zjpp2580369/article/details/82624326
SocketChannel:https://www.cnblogs.com/mishaka/articles/11132247.html
SocketChannel:https://www.jianshu.com/p/007adba06047