学习使用SignalR
1、创建空白的控制台程序
2、添加两个NuGet包(Microsoft.AspNet.SignalR.SelfHost、Microsoft.Owin.Cors、Topshelf)Topshelf用于快捷创建windows服务

3、添加Myservice服务类
using Microsoft.AspNet.SignalR.Hosting;
using Microsoft.Owin.Hosting;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace BCode_Framework_ConsoleSignalR
{
public class MyService
{
private IDisposable SignalR { get; set; }
private string SignalRUrl = string.Empty;
public MyService()
{
SignalRUrl = "http://127.0.0.1:1010";
Console.WriteLine("获取配置:" + SignalRUrl);
} public bool Start()
{
try
{
Console.WriteLine("事实消息服务运行在:" + SignalRUrl);
SignalR = WebApp.Start(SignalRUrl);
return true;
}
catch
{
return false;
} } public bool Stop()
{
if (SignalR != null)
{
SignalR.Dispose();
}
return true;
}
}
}
4、设置Program文件中Main类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Owin;
using Microsoft.Owin.Hosting;
using Topshelf;
namespace BCode_Framework_ConsoleSignalR
{
class Program
{
static void Main()
{
HostFactory.Run(x => {
//设置服务窗口
x.Service<MyService>(sc =>
{
sc.ConstructUsing(service => new MyService());
sc.WhenStarted(service => service.Start());
sc.WhenStopped(service => service.Stop());
});
x.SetServiceName("CheckService");//服务名称
x.SetDescription("Check");//服务描述
x.SetDisplayName("Check Service");//服务显示的名称
x.RunAsLocalSystem();//以本地系统账户启动服务
}); #region 为了方便调试
StartOptions options = new StartOptions();
//服务器Url设置
options.Urls.Add("http://127.0.0.1:1010");
//Server实现类库设置
options.ServerFactory = "Microsoft.Owin.Host.HttpListener";
//以当前的Options和Startup启动Server
using (WebApp.Start(options))
{
Console.WriteLine("Owin Host/Server started,press enter to exit it...");
//显示启动信息,通过ReadLine驻留当前进程
Console.ReadLine();
}//Server在Dispose中关闭
#endregion }
}
}
5、创建SignalR集线器类 重写了一个连接方法和创建一个客户端方法
using Microsoft.AspNet.SignalR;
using Microsoft.AspNet.SignalR.Hubs;
using System;
using System.Threading.Tasks;
namespace BCode_Framework_ConsoleSignalR.Hubs
{
//定义客户端调用服务端方法的名称,如果没有定义注意客户端会自动把服务端方法的首字母改为小写
[HubName("serviceMonitorHub")]
public class ServiceMonitorHub:Hub
{
//当客户端与服务器建立连接后执行的方法
public override Task OnConnected()
{
//获取客户端ID
Console.WriteLine("{0}已连接", Context.ConnectionId);
//服务端往客户端发送数据ServerSendData方法为客户端定义的方法
Clients.Client(Context.ConnectionId).ServerSendData("服务端与客户端:" + Context.ConnectionId + "成功建立连接!");
return base.OnConnected();
}
//客户端执行服务器端的方法
[HubMethodName("ClickSendData")]
public void ClickSendData(string msg)
{
Console.WriteLine("接收到客户端" + Context.ConnectionId + "发送的数据:" + msg);
}
}
}
6、添加Startup启动类
using Microsoft.Owin.Cors;
using Owin;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace BCode_Framework_ConsoleSignalR
{
class Startup
{
public void Configuration(IAppBuilder app)
{
app.UseCors(CorsOptions.AllowAll);
app.MapSignalR();
}
}
}

7、客户端调用
web端引用NuGet包(Microsoft.AspNet.SignalR.JS)
<script src="~/Scripts/jquery-1.6.4.min.js"></script>
<script src="~/Scripts/jquery.signalR-2.4.1.min.js"></script>
<script src="http:127.0.0.1:1010/SignalR/Hubs"></script>
<div>
<input id="txt_value" type="text" />
<input id="btn_send" type="button" value="发送" />
<label id="lbl_msg"></label>
</div>
<script>
var KeyValue = "";
var app = null;
var Connectioned = false;
$(function () {
if (!Connectioned) {
$.connection.hub.url = "http:127.0.0.1:1010/SignalR/Hubs";
app = $.connection.serviceMonitorHub;
}
if (app != null) {
app.client.ServerSendData = function (msg) {
$("#lbl_msg").append("<br/>" + msg);
}
$.connection.hub.start()
.done(function () { $('#btn_send').click(function () {
connected = true;
console.log('Now connected, connection ID=' + $.connection.hub.id);
app.server.ClickSendData($("#txt_value").val());
}) })
.fail(function () {
console.log('Not fount connect');
})
} })
</script>
8、测试结果


学习使用SignalR的更多相关文章
- Asp.net core 学习笔记 SignalR
refer : https://kimsereyblog.blogspot.com/2018/07/signalr-with-asp-net-core.html https://github.com/ ...
- 一步一步学习SignalR进行实时通信_9_托管在非Web应用程序
原文:一步一步学习SignalR进行实时通信_9_托管在非Web应用程序 一步一步学习SignalR进行实时通信\_9_托管在非Web应用程序 一步一步学习SignalR进行实时通信_9_托管在非We ...
- signalr中Group 分组群发消息的简单使用
前一段时间写了几篇关于signalr的文章 1.MVC中使用signalR入门教程 2.mvc中signalr实现一对一的聊天 3.Xamarin android中使用signalr实现即时通讯 在平 ...
- 使用ASP.NET MVC Web SignalR 构建单身聊天室(一)
前言:本系列的头章,想要带大家一起学习Web SignalR,那它是什么呢?ASP .NET SignalR 是一个ASP .NET 下的类库,可以在ASP .NET 的Web项目中实现实时通信.什么 ...
- WinForm中 Asp.Net Signalr消息推送测试实例
p{ text-align:center; } blockquote > p > span{ text-align:center; font-size: 18px; color: #ff0 ...
- 客户端-服务器端互动比较与原生实例(比较ajax,server-sent event,websocket/netsocket)
昨日学习了websocket的原生实例,觉得有必要把几种常见的客户端-服务器端无刷新交互形式列举比较: 一.Ajax:客户端决定何时主动向Server端发请求 如:无刷新评论.无刷新更换图片. 主要目 ...
- 一步一步学习SignalR进行实时通信_1_简单介绍
一步一步学习SignalR进行实时通信\_1_简单介绍 SignalR 一步一步学习SignalR进行实时通信_1_简单介绍 前言 SignalR介绍 支持的平台 相关说明 OWIN 结束语 参考文献 ...
- 一步一步学习SignalR进行实时通信_8_案例2
原文:一步一步学习SignalR进行实时通信_8_案例2 一步一步学习SignalR进行实时通信\_8_案例2 SignalR 一步一步学习SignalR进行实时通信_8_案例2 前言 配置Hub 建 ...
- 一步一步学习SignalR进行实时通信_7_非代理
原文:一步一步学习SignalR进行实时通信_7_非代理 一步一步学习SignalR进行实时通信\_7_非代理 SignalR 一步一步学习SignalR进行实时通信_7_非代理 前言 代理与非代理 ...
随机推荐
- HuaWeiJava 上机
1 /* 2 * 第二题,输入字符串长度,字符串,计数m.从前往后计数,当数到m个元素时,m个元素出列,同时将该元素赋值给m, 3 * 然后从下一个数计数循环,直到所有数字都出列,给定的数全部为大于0 ...
- 刷题-力扣-剑指 Offer II 055. 二叉搜索树迭代器
剑指 Offer II 055. 二叉搜索树迭代器 题目链接 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/kTOapQ 著作权归领扣网络所有 ...
- call bind apply的区别
call() 和apply()的第一个参数相同,就是指定的对象.这个对象就是该函数的执行上下文. call()和apply()的区别就在于,两者之间的参数. call()在第一个参数之后的 后续所有参 ...
- MySQL案例:一次单核CPU占用过高问题的处理
客户现场反馈,top的检查结果中,一个CPU的占用一直是100%.实际上现场有4个CPU,而且这个服务器是mysql专属服务器. 我的第一反应是io_thread一类的参数设置有问题,检查以后发现re ...
- python使用pip安装模块出错 Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None))
python使用pip安装模块出错 Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) 问题: ...
- golang net/http包
http协议 超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络传输协议,所有的WWW文件都必须遵守这个标准.设计HTTP最初的目的是为 ...
- 一、部署sqlserver
1.下载并挂载sqlserver镜像 2.填写秘钥:6GPYM-VHN83-PHDM2-Q9T2R-KBV83 3.默认下一步 4.勾选需要的功能 5.默认下一步 6.默认下一步 等待安装完成即可. ...
- SpringBoot详解(一)——
https://www.cnblogs.com/lifullmoon/p/14957771.html https://www.cnblogs.com/lifullmoon/p/14957751.htm ...
- vscode安装go插件失败
解决办法:使用golang代理,在环境变量中添加两个新变量: 详情参考vscode中为golang开发环境配置代理goproxy 之后便有一部分可以安装成功
- npm配置镜像及nrm使用
淘宝npm镜像 搜索地址:http://npm.taobao.org/ registry地址:http://registry.npm.taobao.org/ cnpmjs镜像 搜索地址:http: ...