在面對不少當前的互聯網應用程序時,其核心底層功能大多須要高性能網絡編程來支撐,而對於Java來講是幸運的,由於在這個領域已經有了一個正在不斷健壯的框架,他就是Netty(一款異步的事件驅動的網絡應用程序框架,支持快速地開發可維護的高性能的面向協議的服務器和客戶端)。java
那麼這個框架入手容易嗎?git
實際上是有必定難度的,即便是一些例子(具有高性能的系統),想要了解並熟知,不只須要一流的編程技巧,還須要幾個複雜領域(網絡編程、多線程處理和併發)的專業知識。github
可是Netty確實提供了極爲豐富的網絡編程工具集,值得咱們花大量時間來消化它。編程
Netty的架構方法和設計原則是:每一個小點都和它的技術性內容同樣重要,無比精妙。咱們能夠更關注如下幾點:安全
關注點分離——業務和網絡邏輯解耦
模塊化和可複用性
可測試性做爲首要的要求
代碼示例 阻塞I/O
ServerSocket serversocket = new ServerSocket(portNumber); Socket clientSocket = serverSocket.accept(); BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true); String request, response; while((request = in.readLine()) != null){ if("Done".equals(request)){ break; } response = processRequest(request); out.println(response); }
恰如以上代碼就實現了Socket API的基本模式之一。或許你應該注意到如下幾點:服務器
這段代碼是否存在弊端?
那麼你或許能夠考慮到如下幾點影響?
結論是?
雖然以上對於支撐中小數量的客戶端來講還算能夠接受,可是在面對100 000或更多併發鏈接資源使用它是很不理想的。網絡
很幸運,你還可使用NIO這種方式!(2002年Java引入對於非阻塞I/O的支持)
使用Selector的非阻塞I/O
相比之下,與阻塞I/O相比,它能更好的利用資源
儘管你能夠直接使用這些API進行直接構建應用程序(在高負載下可靠和高效的處理和調度I/O操做),可是要作到徹底正確與安全是很難處理,那麼這是咱們將工做留給高性能的網絡編程專家Netty或許更合適。多線程
項目名:InChat
項目地址:https://github.com/UncleCatMy...
項目介紹:基於Netty4與SpringBoot,聊天室WebSocket(文字圖片)加API調用Netty長連接執行發送消息(在線數、用戶列表)、Iot物聯網-MQTT協議、TCP/IP協議單片機通訊,異步存儲聊天數據架構
若是本文對你有所幫助,歡迎關注我的技術公衆號併發