首页 > 代码库 > SignalR入门之多平台SignalR服务端
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 ConsoleApplication210 {11 class Program12 {13 static void Main(string[] args)14 {15 try16 {17 //GlobalHost18 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 }
SignalR入门之多平台SignalR服务端
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。