簡體   English   中英

Netty優於基本ServerSocket服務器的好處?

[英]Benefits of Netty over basic ServerSocket server?

我需要創建一個相對簡單的Java tcp / ip服務器,我在確定是否應該使用像Netty這樣的東西或只是堅持使用簡單的ServerSocket和InputStream / OutputStream時遇到一些麻煩。

我們真的只需要監聽請求,然后將新客戶端Socket傳遞給新線程中的某些處理代碼。 一旦處理完成並發送響應,該線程將終止。

我喜歡Netty中管道,解碼器等的想法,但對於這樣一個簡單的場景,似乎不值得增加前期開發時間。 對我們的初始要求來說似乎有點矯枉過正,但我​​有點緊張,有很多事情我不考慮。 如果有的話,Netty對這些簡單要求有什么好處? 我沒有考慮什么?

Netty的主要優點是簡單地使用流來讀取和寫入套接字是Netty支持非阻塞的異步I / O (使用Java的NIO API); 當您使用流來從套接字讀取和寫入時(並且為從ServerSocket接受的每個連接啟動新線程),您正在使用阻塞的同步I / O.

Netty方法可以更好地擴展,如果您的系統需要能夠同時處理多個(數千個)連接,這一點非常重要。 如果您的系統不需要擴展到許多同時連接,那么使用像Netty這樣的框架可能不值得。

更多背景信息:線程是操作系統中相對昂貴的資源。 每個線程需要堆棧的內存(例如可以是2 MB的大小)。 當你創建數千個線程時,這將耗費大量內存; 此外,操作系統對可以創建的線程數量有限制。 因此,您不希望為每個接受的連接啟動新線程。 異步I / O的想法是將線程與連接分離(沒有一對一的關系)。 可以有多個連接而不是線程,並且每當某個連接上發生某些事件時(例如,接收到數據),就會臨時使用來自線程池的線程來處理該事件。

我認為使用netty好處不是立竿見影的,但實際上在需求發生變化並且項目維護變得更加復雜時會更 Netty帶來了對HTTP協議的內在理解,因此您可以提供簡單的RESTful Web服務 此外,您還可以選擇使用netty作為框架提供的異步請求處理 ,以便您可以獲得更好的性能並提供幾個數量級的並發請求。

首先,編寫服務的邏輯,使其獨立於您的通信層。

正如Victor Sorokin所說,自己做這件事有一個學習優勢。 所以用套接字編寫它應該是值得的。 這將需要較少的努力才能開始,如果它運作良好,那么你將參加比賽。

如果您發現以后需要更高的可擴展性/健壯性,可以切換到netty。 只需編寫一個新的netty層,為您的服務邏輯層進行通信並將其交換出來。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM