SignalR入門之多平臺SignalR服務端

以前建立SignalR服務端是基於Web應用程序而言的。那麼能不能把SignalR服務端作成控制檯應用程序、Winform或windows服務呢?html

答案是確定的。windows

以前儘管看起來好像是IIS和ASP.Net構成託管SignalR服務的惟一環境,但事實上並不是如此,不少狀況下采用的並不是是IIS和ASP.NET。app

如今,在這裏以控制檯程序爲例,將SignalR服務端創建在控制檯程序裏。ide

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

install-package Microsoft.AspNet.SignalR.SelfHost編碼

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

而後在控制檯的Program類中code

 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同樣。orm

 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服務,以持久性鏈接的方式進行編碼的。htm

固然,咱們也能夠利用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 }
相關文章
相關標籤/搜索