簡體   English   中英

發送對象時如何避免每個套接字超時?

[英]How do I avoid the timeout of each socket when sending an object?

我將嘗試盡可能精確地描述問題並進行總結:

我必須通過TCP(套接字)將流發送到恰好254個可能的設備“ 192.168.1.2-255”,因為我需要確保信息能夠正確到達,並在盡可能短的時間內完成操作。

  • 如果我一次執行一行,並且超時時間為200毫秒(非常短),則該過程將花費51秒。

  • 如果我在不同的線程中執行每一行,則只花一兩秒鍾,但是創建了254個線程以及程序本身具有的線程,盡管它們僅持續一秒鍾。

我要發送的對象是基本的東西,這將是一個類似的示例:

class Usuarios implements Serializable { 
   private int id,ip;
   private String name;

   //Constructor, Getters and Setters, etc...
}

有沒有一種方法可以解決此問題,而不必每個周期等待一分鍾或運行超過250個線程?

澄清:可能是這樣的形式,但是執行一個這么多的線程似乎很麻煩,即使它是一秒的周期並每10個重復一次。 我已經看過java.NIO庫,但是它在任何地方都沒有闡明如何發送序列化的代碼。對象。

從已經非常感謝你。

發送數據通道套接字不需要繁瑣的CPU使用,而是使用較高的I / O。 您可以使用netty之類的異步庫以很少的線程獲得最快的結果。 另外,使用更兼容的序列化(例如協議緩沖區)可以減少發送數據所需的時間

好了,解決方案是通過以下方式使用ExecutorService和Runnable類:

//10 Threads to execute the task
ExecutorService threadpool = Executors.newFixedThreadPool(10);        

Runnable task = new Runnable() {
   @Override
   public void run() {
     //Task to do with socket's
   }
};
threadpool.submit(task);
threadpool.shutdown();

暫無
暫無

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

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