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 }
时间: 2024-12-14 00:25:10

SignalR入门之多平台SignalR服务端的相关文章

SignalR 实现web浏览器客户端与服务端的推送功能

SignalR 是一个集成的客户端与服务器库,基于浏览器的客户端和基于 ASP.NET 的服务器组件可以借助它来进行双向多步对话. 换句话说,该对话可不受限制地进行单个无状态请求/响应数据交换:它将继续,直到明确关闭. 对话通过永久连接进行,允许客户端向服务器发送多个消息,并允许服务器做出相应答复,值得注意的是,还允许服务器向客户端发送异步消息.它和AJax类似,都是基于现有的技术.本身是一个复合体.一般情况下,SignalR会使用Javascript的长轮询( long polling),实现

1.使用SignalR实现页面即时刷新(服务端主动推送)

模块功能说明: 实现技术:sqlserver,MVC,WebAPI,ADO.NET,SignalR(服务器主动推送) 特殊车辆管理--->移动客户端采集数据存入数据库---->只要数据库数据有变化,服务端自动推送到Wbe页面展示(区别于传统的web请求)-->审核人员审核数据-->返回审核结果给移动客户端 在开发之前搜索了大量文档,也在QQ群咨询过群里的大牛,不少人都感觉比较懵逼的样子.有人建议使用ajax中的长连接,轮询等技术,最终还是决定使用SignalR技术实现页面刷新的效果

Linux socket编程入门(1)-TCP服务端

#include<stdio.h> #include<stdlib.h> #include<string.h> #include<errno.h> #include<sys/types.h> #include<sys/socket.h> #include<netinet/in.h> #define DEFAULT_PORT 8000 #define MAXLINE 4096 int main(int argc, char

python自动化运维——OMserver平台Web服务端部署过程

1.下载源代码(简单不讲述) 2.安装pcre,pcre是一个轻量级的正则表达式函数库,nginx的HTTP Rewrite模块会用到. wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.34.tar.gz tar -zxvf pcre-8.34.tar.gz cd pcre-8.34 ./configure make && make install 3.安装nginx. wget http://nginx.

第二章SignalR所支持的平台

第二章SignalR所支持的平台 SignalR支持各种服务器和客户端的配置.此外,每种传输方式都有自身的配置要求和限制:如果某种传输方式不被系统支持,SignalR优雅地将故障转移到其他类型的传输方式.详细说明,请参阅上一章的传输方式和协商转换. 1服务器端要求: 1)  系统要求:win7,win8,win2008r2,win2012或以上系统 2)  .NetFramework版本要求:.NetFramework4.5或以上版本 3)  IIS版本要求: a)  IIS7,IIS7.5中,

Asp.net SignalR 实现服务端消息推送到Web端

原文:http://www.cnblogs.com/wintersun/p/4148223.html 之前的文章介绍过Asp.net SignalR,  ASP .NET SignalR是一个ASP .NET 下的类库,可以在ASP .NET 的Web项目中实现实时通信.  今天我们来实现服务端消息推送到Web端,   首先回顾一下它抽象层次图是这样的: 实际上 Asp.net SignalR 2 实现 服务端消息推送到Web端, 更加简单. 为了获取更好的可伸缩性, 我们引入消息队列, 看如下

创建自托管的SignalR服务端

微软官方例子地址:http://www.asp.net/signalr/overview/deployment/tutorial-signalr-self-host 1.说明: SignalR服务端可以使Asp.net程序,也就可以是控制台或服务程序这种不需要再IIS上托管的程序.这就是本篇文章的内容介绍. 2.安装扩展: 使用Nuget控制台:Install-Package Microsoft.AspNet.SignalR.SelfHost自托管服务端所需要的程序集. Install-Pack

记录Ocelot + SignalR 多服务端测试

前言 分两个项目,一个Gatway,一个SignalR 贴代码 1.Gatway 1.引用Ocelot 2.添加一点点代码 Startup.cs 3.简单配置ocelot ocelot.json { "ReRoutes": [ { "DownstreamPathTemplate": "/{catchAll}", //下游路径 "DownstreamScheme": "ws", //https //下游协议

利用控制台承载SignalR作为服务端、及第三方推送信息

一 首先建立一个控制台需要引用一些组件 特别要注意引用Microsoft.Owin.Host.HttpListener别忘了这个组件,不引用他可能程序正常运行不会报错,但服务器一直开启失败(我之前就是掉过这个坑了) 二.建立一个控制台程序且建立集线器类MsgHub继承Microsoft.AspNet.SignalR.Hub 三.初始化服务端 四.调用InitSinalR方法即可启用成功服务端 到此完成服务端程序,客户端只需要请求上面地址即可运行 五.写到这只是完成了客户和服务消息传递,怎么将第三