SignalR 設計理念(一) 實現客戶端和伺服器端的實時通訊. 問題闡述 1. 客戶端提供的方法不確定! 2. 客戶端的方法參數不確定! 3. 不同的名稱和參數要分別調用指定的方法! 4. 調用客戶端方法時,忽略大小寫! 例如: 針對以上問題,你會如何設計伺服器架構? SignalR 選用 動態數 ...
SignalR 設計理念(一)
實現客戶端和伺服器端的實時通訊.
問題闡述
- 客戶端提供的方法不確定!
- 客戶端的方法參數不確定!
- 不同的名稱和參數要分別調用指定的方法!
- 調用客戶端方法時,忽略大小寫!
例如:
public void Send(string message) { Clients.All.Write(message); // Clients.All.write(message); 也可以。 }
針對以上問題,你會如何設計伺服器架構?
SignalR 選用
dynamic
動態數據類型作為客戶端通訊的基類。
問:
舉一反三:
- 為什麼伺服器端調用客戶端要忽略大小寫?
核心代碼:
public class ClientProxy : DynamicObject { [SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "0", Justification = "Binder is passed in by the DLR")] public override bool TryInvokeMember(InvokeMemberBinder binder, object[] args, out object result) { result = Invoke(binder.Name, args); return true; } /// <summary> /// 這裡處理業務邏輯 /// </summary> /// <param name="method">方法名稱</param> /// <param name="args">參數</param> /// <returns></returns> public Task Invoke(string method, params object[] args) { return Task.Factory.StartNew(() => { //這裡處理業務邏輯。 }); } }