首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 程式設計入門

Applet 與 Servlet 通訊四大模式深度比較:從參數傳遞到 RMI、CORBA

     編輯:Java 程式設計入門

前言:為何需要直接通訊?

傳統上,Applet (客戶端) 與 Servlet (伺服器端) 透過瀏覽器間接溝通:瀏覽器請求 Servlet,Servlet 回傳 HTML。但對於即時聊天室、股票行情、線上遊戲等需即時雙向推送的場景,建立直接通訊管道至關重要。本文系統比較四種通訊架構:HTML 參數傳遞、Java.net Socket、RMI、CORBA。

一、HTML 參數傳遞:最簡單的單向控制

Servlet 動態生成包含 <PARAM> 標籤的 HTML 頁面,Applet 透過 getParameter() 讀取。

// Servlet 端
out.write("<APPLET code=\"SimpleApplet\" width=\"225\" height=\"149\">");
out.write("<PARAM name=\"Data\" value=\"" + new Date() + "\">");
out.write("</APPLET>");

優點:部署簡單,無額外埠口、防火牆問題。
缺點:單向 (Servlet→Applet);資料靜態化,更新需重載整頁;大量/複雜資料會導致 HTML 膨脹。

二、Java.net Socket 雙向通訊:輕量級完全控制

直接使用 java.net.Socket (Client) 與 ServerSocket (Server) 建立 TCP 連線,自定義應用層協議。

伺服器端骨架

ServerSocket server = new ServerSocket(PORT);
while (running) {
    Socket client = server.accept(); // 阻塞等待連線
    DataInputStream in = new DataInputStream(new BufferedInputStream(client.getInputStream()));
    PrintStream out = new PrintStream(new BufferedOutputStream(client.getOutputStream()));
    // 處理請求、回應...
    out.close(); in.close(); client.close();
}
server.close();

客戶端

Socket socket = new Socket("serverName", PORT);
OutputStream out = socket.getOutputStream();
DataInputStream in = new DataInputStream(socket.getInputStream());
// 互動...
out.close(); in.close(); socket.close();

優點:標準 API,無第三方依賴;協議完全自定,極致靈活。
缺點:需自行處理協議解析、序列化、執行緒池、連線管理、錯誤重試;防火牆常封鎖非標準埠;複雜業務邏輯開發維護成本高。

三、RMI (Remote Method Invocation):Java 物件級透明呼叫

RMI 讓客戶端像呼叫本地物件方法一樣呼叫伺服器端物件方法,底層自動處理序列化 (Serialization)、存根/骨架、網路傳輸。

核心步驟:

  1. 定義 Remote 介面,方法拋出 RemoteException。
  2. 實作介面,繼承 UnicastRemoteObject。
  3. 伺服器端用 Naming.rebind() 向 RMI Registry 註冊遠端物件。
  4. 客戶端用 Naming.lookup() 取得遠端參考 (Stub) 呼叫方法。

優點:程式碼清晰,物件導向透明化;支援分散式垃圾回收、安全管理器。
缺點:純 Java 環境,異構語言互通困難;RMI Registry 埠口 (預設 1099) 易被防火牆攔截;大量細粒度遠端呼叫效能不佳 (建議粗粒度介面設計)。

四、CORBA (Common Object Request Broker Architecture):跨語言、跨平台企業級標準

透過 IDL (Interface Definition Language) 定義介面,編譯器產生各語言 (Java, C++, Python...) 的存根/骨架。ORB (Object Request Broker) 處理封裝、傳輸、解封裝。

優點:語言中立,異構系統整合首選;成熟服務 (命名、事務、安全、事件) 豐富。
缺點:學習曲線陡峭;IDL 映射複雜;ORB 實作 (如 JacORB, Orbix) 體重、配置繁瑣;效能開銷大於 RMI/Socket。

綜合比較表

維度HTML 參數SocketRMICORBA
通訊方向單向 (S→A)雙向雙向雙向
資料即時性靜態/重載即時即時即時
開發複雜度極低高 (自管協議/執行緒)中 (物件透明)高 (IDL/ORB)
跨語言支援無需自定協議純 Java原生支援
防火牆友善最佳 (HTTP)差 (需開埠)差 (多埠/回呼)差 (IIOP 埠)
適用場景初始化配置、簡單參數高效能、自定協議、遊戲、串流Java 內部分散式系統、EJB 底層企業級異構整合、遺留系統包裝

架構選型建議

  • 內部 Java 微服務:優先考慮 gRPC (現代替代 RMI) 或 REST/JSON over HTTP/2。
  • 即時推送:WebSocket (標準 HTTP 升級) 或 Server-Sent Events (SSE) 取代 Socket/Applet。
  • 異構整合:RESTful API、gRPC、GraphQL、訊息佇列 (Kafka/RabbitMQ)。
  • 遺留 CORBA 系統:維持現狀或逐步以 API Gateway 包裝遷移。

結語

Applet 已退出歷史舞台,但「客戶端與伺服器如何高效、安全、演進地通訊」永遠是軟體架構的核心議題。理解這四種模式的權衡,有助於在現代技術棧中做出更合適的架構決策。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved