vs2010 使用SignalR 提高B2C商城用戶體驗(三)
上一章節,我們的web即時通訊已經可以實現跨域了,但針對我們的需求,還希望,一些客戶端程序可以和我們的web用戶,在線聊天,所以到SignalR官網,查閱文檔,當然,還有版本限制,限制都是SignalR 2.0了,我們1.幾版本的能不能完美支持呢?
看到了這些內容,感覺是不是很驚喜,全端支持
我們來看.NET Library,大概瀏覽一下,啟動VS,新建一個WinForm程序,打開nuget,找到Client的對應版本:
Install-Package Microsoft.AspNet.SignalR.Client -Version 1.1.2
此時,我們的項目結構如下:
我們看到,相應的引用已經添加,只有2個類庫就可以輕松實現客戶端通信了,有空研究一下源碼,反正是開源的,這樣就可以根據源碼開發出對應的C++版本,以便注冊用戶的客戶端開發了。
此時打開From1.cs的代碼,添加如下:
namespace SignalRclient { public partial class Form1 : Form { HubConnection hubConnection; IHubProxy hubProxy; private delegate void AddTxt(string msg); public Form1() { InitializeComponent(); hubConnection = new HubConnection("http://localhost:2154/signalr/hubs"); hubProxy = hubConnection.CreateHubProxy("pushHub"); hubProxy.On<string>("addMessage", (message) => this.Invoke(new AddTxt(Show), message)); hubConnection.Start().Wait(); } private void Show(string msg) { textBox2.Text += msg + "\r\n"; } private void btnSubmit_Click(object sender, EventArgs e) { hubProxy.Invoke("send", textBox1.Text).Wait(); } } }
代碼大概解釋一下,
hubConnection = new HubConnection("http://localhost:2154/signalr/hubs"); 初始化對我們IM服務器的集線器連接,
hubProxy = hubConnection.CreateHubProxy("pushHub");連接指定的集線器。
hubProxy.On<string>("addMessage", (message) => this.Invoke(new AddTxt(Show), message)); 配置我們服務端定義的匿名方法,並設置委托方法,以供調用。
hubProxy.Invoke("send", textBox1.Text).Wait(); send 是我們在服務端定義的發送方法,這里都是通過方法名調用的,有點類似js的eval了,是不是很強大。
代碼很簡單,也很方便的可以擴展使用,我們啟動程序,看一下效果

已經可以收到自己發出的信息,是不是很神奇,方法名一定要對應上,不然可收不到。
我們再啟動web端,和跨域端,看看是不是三端都可以通信了:

LOL,是不是很強大,現在,我們的商戶已經可以和買家進行即時溝通了。后面我們可以深入擴展,並將Android和IOS的系統一起合並進來,會不會超越qq呢。