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

C# 遠端執行與分散式計算:客戶端建立與任務伺服器實戰(二)

     編輯:關於C語言

建立遠端物件客戶端

前提:遠端物件類別需存在於客戶端本機(供 .NET Remoting 基礎結構代理解序列化)。

  1. 建立並註冊通道(無需指定埠,稍後透過 URL 指定):
    TcpChannel channel = new TcpChannel();
    ChannelServices.RegisterChannel(channel);
    
  2. 透過 Activator.GetObject 取得遠端物件 Proxy:
    
    MyCoolObject obj = (MyCoolObject)Activator.GetObject(
      typeof(MyCoolObject),
      "tcp://localhost:8085/MyCoolObject"
    );
    
    參數一:遠端類別型別;參數二:遠端物件 URL(含通道協定、主機、埠、物件名)。取得後可視為本地物件呼叫方法。

功能強大的任務伺服器

TaskRunner 物件部署於伺服器,客戶端取得 Proxy 後可提交任務。核心契約:


public interface ITask {
  object Run();    // 執行任務,回傳結果物件
  string Identify(); // 任務識別描述
}

客戶端實作 ITask、標記 [Serializable],將含業務邏輯與資料的任務物件「按值傳遞」送至伺服器,在伺服器應用程式域執行。適用場景:

  • 客戶端資源受限(記憶體、CPU),需借用伺服器算力。
  • 伺服器擁有特殊資源(資料庫、授權元件、高效能硬體)。
  • 任務邏輯頻變,不想重新部署伺服器代碼。

範例:計算 3000 位數圓周率、大數運算、加密/壓縮/排序等密集運算任務。

按值傳遞與序列化

物件跨應用程式域傳遞需序列化為位元組流,再於目標端反序列化還原。實作方式:


[Serializable]
class ClientTask { /* 完整任務邏輯與資料 */ }

注意:物件引用的外部組件(DLL)亦需可序列化,否則遠端端無法重建完整物件圖。

專案建置與執行順序


csc /target:library /out:ITask.dll ITask.cs
csc /target:library /out:TaskRunner.dll TaskRunner.cs
csc /r:ITask.dll /r:TaskRunner.dll TaskServer.cs
csc /r:ITask.dll /r:TaskRunner.dll TaskClient.cs
  1. 啟動 TaskServer.exe,等待提示 [i] Task Server Started, press <Enter> to exit?
  2. 執行 TaskClient.exe,提交任務至伺服器執行並取回結果。

範例客戶端任務:實作 ITask 計算兩數乘積並回傳 int。開發者可自行擴充任務類型,體驗分散式計算將複雜運算卸載至伺服器的強大威力。

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