簡體   English   中英

Java RMI 連接斷開

[英]Java RMI connection broken

我們有一個 java 客戶端-服務器 RMI 應用程序。 客戶端通過以下方式執行調用:

public interface MyRemoteInterface extends java.rmi.Remote {
    public byte[] action(byte[] b}

public static Remote lookUp(String ip, int port, String alias) {
    return LocateRegistry.getRegistry(ip, port).lookup(alias)
}


 serverImpl = (MyRemoteInterface)lookUp(ip, rmpiport, alias);

 serverImpl.action(requestBytes);
 ..

它是一個經典的 rmi 客戶端-服務器應用程序。 當遠程服務器接收到請求(調用)時,它會執行一些過程 P,這需要時間 T 然后返回。 問題是,假設我們分別有兩個客戶端 C1 和 C2,每個客戶端都是相同的(相同的操作系統,相同的 Java,沒有防火牆,沒有防病毒軟件等)。 C1和C2的區別在於他們在不同的網絡,不同的ISP提供等。例如他們是兩個用戶從家里連接,使用不同的服務提供商,調制解調器並連接到集中式服務器S。當過程P需要4分鍾時,沒有問題,兩個客戶端都收到響應。 但是如果處理時間需要例如 10 分鍾,C2 在服務器或客戶端沒有任何異常都沒有收到任何響應。 問題:造成這種差異的原因是什么? 網絡架構如何影響 rmi 連接的行為? 我們可以通過設置一些超時參數或jvm-parameters來克服這個問題嗎? 我們沒有在客戶端或服務器上收到任何超時異常。 如果處理時間變長,那么其中一個客戶端不會收到任何響應。

如果處理時間變長,那么其中一個客戶端不會收到任何響應。

在我們的(企業)網絡中,我們有一些有效的政策來關閉長時間不活躍的連接。 所以可能會有差異。 雖然客戶端應該得到一個適當的例外。 為了獲得更好的答案,您可以收集有關網絡級別的更准確信息(例如 tcpdump)

但是如果處理時間需要例如 10 分鍾

在遠程執行時(不管協議如何),我不太喜歡長時間運行的進程。 主要是為了防止出現您問題中的問題。

您可以使用一些異步處理,例如啟動服務器進程然后讓客戶端檢查狀態/結果的方法。

暫無
暫無

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

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