有時間想記錄一下關於Netty的知識。java
第一課:傳統IO的特色。socket
package com.example.aimei.controller; import java.io.InputStream; import java.net.ServerSocket; import java.net.Socket; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; /** * @author yuanzipeng * @date 2018/11/21 */ public class OioServer { public static void main(String[] args) throws Exception { //加線程 ExecutorService threadPool = Executors.newCachedThreadPool(); //建立ServerSocket服務 ServerSocket serverSocket = new ServerSocket(5566); System.out.println("服務端啓動!"); while (true) { //獲取一個套接字(阻塞) Socket socket = serverSocket.accept(); System.out.println("來一個客戶端!"); threadPool.execute(new Runnable() { @Override public void run() { //業務處理 handle(socket); } }); } } public static void handle(Socket socket) { try { byte[] bytes = new byte[1024]; InputStream inputStream = socket.getInputStream(); while (true) { //讀取數據(阻塞) int read = inputStream.read(bytes); if (read != -1) { System.out.println(new String(bytes, 0, read)); } else { break; } } } catch (Exception e) { e.printStackTrace(); } finally { System.out.println("Socke關閉!"); try { socket.close(); } catch (Exception e) { e.printStackTrace(); } } } }
運行上面的代碼啓動服務端,用DOS命令窗口做爲客戶端,命令爲:telnet 127.0.0.1 5566,以下:ide
肯定,而後快捷鍵CTRL+],而後輸入send hellospa
java控制檯就會收到hello,能夠多連幾個客戶端。.net
從上面的代碼能夠知道傳統的IO在獲取套接字和讀取數據的時候分別有一次阻塞。若是不用線程一個ServerSocket服務只能連一個客戶端,用了線程處理至關於一個ServerSocket服務中的一個線程只能鏈接一個客戶端。相對於NIO缺點就是消耗的資源比較多,只適合做爲短鏈接,不適合做爲長鏈接。線程