学习使用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_非代理 前言 代理与非代理 ...
随机推荐
- Python - 面向对象编程 - @property
前言 前面讲到实例属性的时候,我们可以通过 实例对象.实例属性 来访问对应的实例属性 但这种做法是不建议的,因为它破坏了类的封装原则 正常情况下,实例属性应该是隐藏的,只允许通过类提供的方法来间接实现 ...
- Go并发控制--WaitGroup篇
目录 1. 前言 2. 使用WaitGroup控制 2.1 使用场景 2.2 信号量 1.3 WaitGroup 数据结构 2.3.1 Add () 方法 2.3.2 Wait() 2.3.3 Don ...
- Ubuntu 配置、使用samba共享文件夹
安装库 sudo apt install smbclient samba samba-common 启动samba sudo /etc/init.d/samba start 备份配置文件 sudo c ...
- 【图像处理】使用SDL预览webp图片
写在前面的话 WebP是Google开发的一种图像格式,支持图像数据的有损和无损压缩.保留动画和alpha透明通道数据. 可以创建和JPEG.PNG和GIF图像格式在质量相同或质量更高,但是数据更小的 ...
- MySQL——获取元数据
---------------------------------------------------------------------------------------------------- ...
- 20210819 Emotional Flutter,Medium Counting,Huge Counting,字符消除2
考场 T1 一下想到了这题,将白块缩短 \(s\) 后维护类似的区间即可. T2 T3 俩计数,直接跳了. T4 的可行 \(t\) 集合相同相当与从 \(n\) 往前跳 kmp 数组,途径点相同,从 ...
- vscode安装go插件失败
解决办法:使用golang代理,在环境变量中添加两个新变量: 详情参考vscode中为golang开发环境配置代理goproxy 之后便有一部分可以安装成功
- 基于flex布局的header
一.如图 二.思路 1.定义header,设置宽为100%,高为60px,设置绝对定位,使其为漂浮层.在header里添加container,宽设置为版心宽度,并且设置flex布局. 2.在conta ...
- throws声明异常中断式处理异常
1.throws 编译期异常,一直往上抛最后是JVM处理(打印并中断程序) 2.声明多个或者直接声明父类
- sed 找出含有某个字符串的行 注释掉
1.源文件例子 [root@node1 ~]# cat /etc/fstab # # /etc/fstab # Created by anaconda on Mon Mar 1 18:32:15 20 ...