簡體   English   中英

Java數據包處理程序線程

[英]Java Packet Handler Threading

我有一個快速的一般性問題。 我目前正在使用Netty處理來自客戶端的TCP和UDP數據包。 我每個套接字偵聽器都位於單獨的線程上,並且效果很好。

現在,我擔心的是,當流量開始嚴重下降時,我認為每個處理程序都無法使用單個線程來管理消息。 為每條消息生成一個新線程是否正確(我覺得不是)? 還是應該為此使用諸如Threadpool之類的東西? 任何建議將不勝感激。

這是消息處理程序的一些示例代碼。 我編寫了一些偽代碼來可視化此過程。 這也可能對你們有幫助。

    @Override
public void messageReceived(ChannelHandlerContext ctx, DatagramPacket packet) {
    //This will likely need made into a thread
    //SocketDecoder.decode(packet.content().toString(CharsetUtil.US_ASCII));
    //Handle decoded message, will return CharSequence
    DatagramPacket response = Namespace.Decoder.createDatagram(packet, "hello");
    ctx.writeAndFlush(response);
}

您需要做出有根據的猜測。

我的意思是說,對於服務器端設計,您應該考慮以下編程觀點。

1)該服務器做什么? 它只是中繼消息還是要進行處理? 如果存在需要完成的過程,則處理傳入消息的可能性就很大,因為這些過程可能是限制因素。

2)您期望多少“流量”? 隨時估計的服務器負載是多少? 我知道在構建第一個服務器時這很困難。 但是您需要知道您的目標。 如果您認為整個世界都會使用它,那么您確實需要為此做好准備。 否則,我建議您嘗試進行自我測試。

現在您已經知道許多游戲服務器/消息服務器是多服務器,它們有一個主服務器,它們將工作委托給其他服務器,如果需要,它們都可以相互通信。 也許這取決於您需要的程序類型。

但是實際上您應該嘗試創建要測試的服務器。 我建議使用單線程的消息偵聽器/數據包處理程序。 而且,如果您需要處理某些東西,請從另一個處理線程中進行射擊。 真正的服務器設計原則(如您所要求的唯一原則)僅在數千名用戶中生效。 即使這樣,它在很大程度上仍取決於您需要在服務器上運行的進程。

暫無
暫無

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

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