SignalR入門之多平台SignalR服務端


之前創建SignalR服務端是基於Web應用程序而言的。那么能不能把SignalR服務端做成控制台應用程序、Winform或windows服務呢?

答案是肯定的。

之前盡管看起來好像是IIS和ASP.Net構成托管SignalR服務的唯一環境,但事實上並非如此,很多情況下采用的並非是IIS和ASP.NET。

現在,在這里以控制台程序為例,將SignalR服務端建立在控制台程序里。

如何在控制台程序實現基於Hub或持久性連接的SignalR服務呢,首先安裝下面的包:

install-package Microsoft.AspNet.SignalR.SelfHost

安裝完成后,項目會自動加載需要引用的庫文件。

然后在控制台的Program類中

 1 using System.Linq;
 2 using System.Text;
 3 using System.Threading.Tasks;
 4 
 5 namespace ConsoleApplication1
 6 {
 7     class Program
 8     {
 9         static void Main(string[] args)
10         {
11             using (WebApp.Start<Startup>("http://localhost:8888/"))//啟動服務,訪問路徑在這里配置。
12             {
13                 Console.WriteLine("Server running at http://localhost:8888/");
14                 Console.ReadLine();
15             }
16         }
17     }
18 }

在上面的代碼中,我們可以看出需要一個啟動類Starup,這個類與我們之前建立持久性連接或Hub一樣。

 1 using System;
 2 using System.Threading.Tasks;
 3 using Microsoft.Owin;
 4 using Owin;
 5 
 6 [assembly: OwinStartup(typeof(Startup))]
 7 
 8 public class Startup
 9 {
10     public void Configuration(IAppBuilder app)
11     {
12         app.MapSignalR<TestConnection>("/test");//配置指定持久性連接類,同時映射訪問路徑后面有用
13     }
14 }
 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Threading.Tasks;
 5 using System.Web;
 6 using Microsoft.AspNet.SignalR;
 7 
 8 public class TestConnection : PersistentConnection
 9 {
10     protected override Task OnConnected(IRequest request, string connectionId)
11     {
12         return Connection.Send(connectionId, "Welcome!");
13     }
14 
15     protected override Task OnReceived(IRequest request, string connectionId, string data)
16     {
17         Console.WriteLine(connectionId+"============="+data);//服務端接受消息
18         return Connection.Broadcast(data);//將消息發送給所有客戶端
19     }
20 }

以上的方式是在控制台里面建立SignalR服務,以持久性連接的方式進行編碼的。

當然,我們也可以利用Hub來設置服務端,方式與之前的一樣。

SignalR的服務端建立好后,我們需要建立一個客戶端,之前,我們的客戶端都是在html中以js的方式進行建立連接的。那么現在,我們將客戶端也建立為控制台應用程序。

首先建立一個控制台應用程序,然后安裝如下包:

install-package microsoft.aspnet.signalr.client

 

然后在Program類中的Main方法中編寫:

 1 using Microsoft.AspNet.SignalR.Client.Transports;
 2 using System;
 3 using System.Collections.Generic;
 4 using System.Linq;
 5 using System.Text;
 6 using System.Threading.Tasks;
 7 using Microsoft.AspNet.SignalR;
 8 using Microsoft.AspNet.SignalR.Client;
 9 namespace ConsoleApplication2
10 {
11     class Program
12     {
13         static void Main(string[] args)
14         {
15             try
16             {
17                 //GlobalHost
18                 var connection = new Connection("http://localhost:8888/test");//服務端配置好的訪問路徑以及持久性連接映射路徑
19                 
20                 connection.Start();//開始連接
21                 connection.Received += Connection_Received;//配置接受消息事件
22                 string str = "";
23                 while ((str = Console.ReadLine()) != "")
24                 {
25                     connection.Send(str);//發送消息
26                 }
27         
28             }
29             catch (Exception ex)
30             {
31 
32                 Console.WriteLine(ex.Message);
33             }
34             Console.Read();
35         }
36 
37         private static void Connection_Received(string obj)
38         {
39             Console.WriteLine(obj);
40         }
41     }
42 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM