SignalR入门之多平台SignalR服务端
之前创建SignalR服务端是基于Web应用程序而言的。那么能不能把SignalR服务端做成控制台应用程序、Winform或windows服务呢?
答案是肯定的。
之前尽管看起来好像是IIS和ASP.Net构成托管SignalR服务的唯一环境,但事实上并非如此,很多情况下采用的并非是IIS和ASP.NET。
现在,在这里以控制台程序为例,将SignalR服务端建立在控制台程序里。
如何在控制台程序实现基于Hub或持久性连接的SignalR服务呢,首先安装下面的包:
install-package Microsoft.AspNet.SignalR.SelfHost
安装完成后,项目会自动加载需要引用的库文件。
然后在控制台的Program类中
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
using (WebApp.Start<Startup>("http://localhost:8888/"))//启动服务,访问路径在这里配置。
{
Console.WriteLine("Server running at http://localhost:8888/");
Console.ReadLine();
}
}
}
}
在上面的代码中,我们可以看出需要一个启动类Starup,这个类与我们之前建立持久性连接或Hub一样。
using System;
using System.Threading.Tasks;
using Microsoft.Owin;
using Owin; [assembly: OwinStartup(typeof(Startup))] public class Startup
{
public void Configuration(IAppBuilder app)
{
app.MapSignalR<TestConnection>("/test");//配置指定持久性连接类,同时映射访问路径后面有用
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Web;
using Microsoft.AspNet.SignalR; public class TestConnection : PersistentConnection
{
protected override Task OnConnected(IRequest request, string connectionId)
{
return Connection.Send(connectionId, "Welcome!");
} protected override Task OnReceived(IRequest request, string connectionId, string data)
{
Console.WriteLine(connectionId+"============="+data);//服务端接受消息
return Connection.Broadcast(data);//将消息发送给所有客户端
}
}
以上的方式是在控制台里面建立SignalR服务,以持久性连接的方式进行编码的。
当然,我们也可以利用Hub来设置服务端,方式与之前的一样。
SignalR的服务端建立好后,我们需要建立一个客户端,之前,我们的客户端都是在html中以js的方式进行建立连接的。那么现在,我们将客户端也建立为控制台应用程序。
首先建立一个控制台应用程序,然后安装如下包:
install-package microsoft.aspnet.signalr.client
然后在Program类中的Main方法中编写:
using Microsoft.AspNet.SignalR.Client.Transports;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.AspNet.SignalR;
using Microsoft.AspNet.SignalR.Client;
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
try
{
//GlobalHost
var connection = new Connection("http://localhost:8888/test");//服务端配置好的访问路径以及持久性连接映射路径 connection.Start();//开始连接
connection.Received += Connection_Received;//配置接受消息事件
string str = "";
while ((str = Console.ReadLine()) != "")
{
connection.Send(str);//发送消息
} }
catch (Exception ex)
{ Console.WriteLine(ex.Message);
}
Console.Read();
} private static void Connection_Received(string obj)
{
Console.WriteLine(obj);
}
}
}
SignalR入门之多平台SignalR服务端的更多相关文章
- SignalR 实现web浏览器客户端与服务端的推送功能
SignalR 是一个集成的客户端与服务器库,基于浏览器的客户端和基于 ASP.NET 的服务器组件可以借助它来进行双向多步对话. 换句话说,该对话可不受限制地进行单个无状态请求/响应数据交换:它将继 ...
- 1.使用SignalR实现页面即时刷新(服务端主动推送)
模块功能说明: 实现技术:sqlserver,MVC,WebAPI,ADO.NET,SignalR(服务器主动推送) 特殊车辆管理--->移动客户端采集数据存入数据库---->只要数据库数 ...
- 使用SignalR实现页面即时刷新(服务端主动推送)
模块功能说明: 实现技术:sqlserver,MVC,WebAPI,ADO.NET,SignalR(服务器主动推送) 特殊车辆管理--->移动客户端采集数据存入数据库---->只要数据库数 ...
- ASP.NET SignalR 系列(七)之服务端触发推送
前面几章讲的都是从客户端触发信息推送的,但在实际项目中,很多信息可能是由系统服务端推送的,下面2图分别展示两种通道 客户端触发推送 服务端推送 下面我们就重点介绍下服务端如何调用集线器的对象进行推送 ...
- SignalR入门二、使用 SignalR 2 实现服务器广播
一.概述 这篇教程通过实现一个股票报价的小程序来讲解如何使用SignalR进行服务器端的推送,服务器会模拟股票价格的波动,并把最新的股票价格推送给所有连接的客户端,最终的运行效果如下图所示. 教程:使 ...
- SignalR入门一、通过 SignalR 2 进行实时聊天
一:什么是signalR Asp.net SignalR是微软为实现实时通信的一个类库.一般情况下,signalR会使用JavaScript的长轮询(long polling)的方式来实现客户端和服务 ...
- socket 通信 入门3 android 客户端 C# 服务端
这是一个android端操控服务器的例子 就是发送简单指令到服务器 然后服务器响应什么的... 当然这里是未完成的 只是简单展示一下大致思路 首先连接建立起来后 服务端给客户端一条信息 告诉 ...
- webservice快速入门-使用wsimport生成ws服务端(二)
上个例子演示的是在当前项目下发布的Webservice Server,而实际应用中和Client是分离的,本文介绍两种客户端开发方式: 1.导出WebService服务端服务接口到jar包,客户端引入 ...
- 第二章SignalR所支持的平台
第二章SignalR所支持的平台 SignalR支持各种服务器和客户端的配置.此外,每种传输方式都有自身的配置要求和限制:如果某种传输方式不被系统支持,SignalR优雅地将故障转移到其他类型的传输方 ...
随机推荐
- 浅谈Excel开发:九 Excel 开发中遇到的常见问题及解决方法
Excel开发过程中有时候会遇到各种奇怪的问题,下面就列出一些本人在开发中遇到的一些比较典型的问题,并给出了解决方法,希望对大家有所帮助. 一 插件调试不了以及错误导致崩溃的问题 在开发机器上,有时可 ...
- 安卓手动新增SDK
一:下载SDK 比如,我正要使用sdk5.0,于是我随便找了一个源下载:http://download.csdn.net/detail/dan_seek/8216801 二:整合进eclipse 解压 ...
- atitit 点播系统 概览 v2 qb1.docx
atitit 点播系统 概览 v2 qb1.docx 1.1. 多界面(可以挂载多个不同的界面主题)1 1.2. 独立的选片模块(跨设备,跨平台)2 1.3. 跨设备平台(android安卓盒子,pc ...
- fir.im Weekly - 如何做一个出色的程序员
做一个出色的程序员,困难而高尚.本期 fir.im Weekly 精选了一些实用的 iOS,Android 开发工具和源码分享,还有一些关于程序员的成长 Tips 和有意思有质量的线下活动~ How ...
- 1.安装Redis
首要条件:安装VMware,在虚拟机中安装CentOS. 安装步骤: 1.打开终端(Terminal) 2.在终端输入:wget http://download.redis.io/releases/r ...
- Java 7 中的Switch 谈 Java版本更新和反编译知识
Java 7 中的Switch 谈 Java版本更新和反编译知识 学习编程,享受生活,大家好,我是追寻梦的飞飞.今天主要讲述的是Java7中的更新Switch实现内部原理和JAD反编 ...
- Js控制显示、隐藏文本框中的密码
Js控制显示.隐藏文本框中的密码,也可称为是一款小型的JavaScript星号密码破解器,点击会显示出密码类型的文本框中的真实信息,再次点击则还原,程序 主要是获取HTML元素对象,然后强制更改元素属 ...
- CSS实现水平垂直同时居中的5种思路
× 目录 [1]水平对齐+行高 [2]水平+垂直对齐 [3]margin+垂直对齐[4]absolute[5]flex 前面的话 水平居中和垂直居中已经单独介绍过,本文将介绍水平垂直同时居中的5种思路 ...
- Socket桥(转载)
最好方案:使用haproxy 或者nginx转发.自己写程序性能和监控难保证,推荐使用开源软件替代. 源地址为:http://baishaobin2003.blog.163.com/blog/stat ...
- [转载]SVN使用教程
SVN简介: 为什么要使用SVN? 程序员在编写程序的过程中,每个程序员都会生成很多不同的版本,这就需要程序员有效的管理代码,在需要的时候可以迅速,准确取出相应的版本. Subversion是什么? ...