最近有個需求,就是研究類似 facebook, plurk 等即時更新 client 畫面的技術,
技術細節可以 google "long-polling" 就會有需多相關文章,
也剛好,去年七月左右 Microsoft 推出了 SignalR ,當時只是覺得這功能超炫的,
但是沒有馬上動手試看看,直到最近開始找相關的文章,
看到了黑暗執行緒大大的文章利用SignalR實現遠端程式遙控功能,
覺得一定要動手嘗試看看,而且大大都把範例程式都給貼上來了,
所以馬上來測試。
不過立刻就碰到問題了,當時版本和現在版本差一半吧(0.5?和1.0)
連 namespace 都不一樣了,不過我想應該小小的修改一下就可以了吧。
原始程式範例請至黑暗執行緒大大的網站觀賞,以下僅列出需要修改的地方。
SignalRClient 專案的部分以 NuGet 安裝 Microsoft.AspNet.SignalR.Client
指令為 Install-Package Microsoft.AspNet.SignalR.Client
console 專案安裝 Microsoft.AspNet.SignalR 前後差異
需要 using 的 namespace
程式的部分
//須將 IHubProxy commHub = connection.CreateProxy("CommHub"); //改為 IHubProxy commHub = connection.CreateHubProxy("commHub");
接著是 web 專案,建立一個 asp.net mvc 4 的空白專案
安裝 Microsoft.AspNet.SignalR
指令為 Install-Package Microsoft.AspNet.SignalR
還要安裝 WebActivator
在 App_Start 加入 class RegisterHubs 內容如下(用來產生 signalr/hubs 的):
接著在 Controller 和 Model 中的 code 要修改的就是 namespace 和 Client 取得的方法,
// 原本的 context.Clients.ShowMessage(msg); // 修改後的 context.Clients.All.ShowMessage(msg); // 原本的 context.Clients[cid].ShowMessage(msg); // 修改後的 context.Clients.Client(cid).ShowMessage(msg);
接著在 view 中需要修改的部分是 hub 呼叫 server/client 方法有更動
// 原本的 commHub.RefreshStats = function(dict) { // 修改後的,呼叫 client 的 RefreshStats commHub.client.RefreshStats = function (dict) { // 原本的 commHub.register("Console"); // 修改後的,呼叫 server 的 register commHub.server.register('Console');
到此修改完畢,可以好好地玩玩看 web 遠端遙控 console 的 client 了。
最後就可以得到,下面這樣的成果。