1、创建空白的控制台程序

2、添加两个NuGet包(Microsoft.AspNet.SignalR.SelfHost、Microsoft.Owin.Cors、Topshelf)Topshelf用于快捷创建windows服务

3、添加Myservice服务类

  1. using Microsoft.AspNet.SignalR.Hosting;
  2. using Microsoft.Owin.Hosting;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Linq;
  6. using System.Text;
  7. using System.Threading.Tasks;
  8.  
  9. namespace BCode_Framework_ConsoleSignalR
  10. {
  11. public class MyService
  12. {
  13. private IDisposable SignalR { get; set; }
  14. private string SignalRUrl = string.Empty;
  15. public MyService()
  16. {
  17. SignalRUrl = "http://127.0.0.1:1010";
  18. Console.WriteLine("获取配置:" + SignalRUrl);
  19. }
  20.  
  21. public bool Start()
  22. {
  23. try
  24. {
  25. Console.WriteLine("事实消息服务运行在:" + SignalRUrl);
  26. SignalR = WebApp.Start(SignalRUrl);
  27. return true;
  28. }
  29. catch
  30. {
  31. return false;
  32. }
  33.  
  34. }
  35.  
  36. public bool Stop()
  37. {
  38. if (SignalR != null)
  39. {
  40. SignalR.Dispose();
  41. }
  42. return true;
  43. }
  44. }
  45. }

4、设置Program文件中Main类

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using Microsoft.Owin;
  7. using Microsoft.Owin.Hosting;
  8. using Topshelf;
  9. namespace BCode_Framework_ConsoleSignalR
  10. {
  11. class Program
  12. {
  13. static void Main()
  14. {
  15. HostFactory.Run(x => {
  16. //设置服务窗口
  17. x.Service<MyService>(sc =>
  18. {
  19. sc.ConstructUsing(service => new MyService());
  20. sc.WhenStarted(service => service.Start());
  21. sc.WhenStopped(service => service.Stop());
  22. });
  23. x.SetServiceName("CheckService");//服务名称
  24. x.SetDescription("Check");//服务描述
  25. x.SetDisplayName("Check Service");//服务显示的名称
  26. x.RunAsLocalSystem();//以本地系统账户启动服务
  27. });
  28.  
  29. #region 为了方便调试
  30. StartOptions options = new StartOptions();
  31. //服务器Url设置
  32. options.Urls.Add("http://127.0.0.1:1010");
  33. //Server实现类库设置
  34. options.ServerFactory = "Microsoft.Owin.Host.HttpListener";
  35. //以当前的Options和Startup启动Server
  36. using (WebApp.Start(options))
  37. {
  38. Console.WriteLine("Owin Host/Server started,press enter to exit it...");
  39. //显示启动信息,通过ReadLine驻留当前进程
  40. Console.ReadLine();
  41. }//Server在Dispose中关闭
  42. #endregion
  43.  
  44. }
  45. }
  46. }

5、创建SignalR集线器类 重写了一个连接方法和创建一个客户端方法

  1. using Microsoft.AspNet.SignalR;
  2. using Microsoft.AspNet.SignalR.Hubs;
  3. using System;
  4. using System.Threading.Tasks;
  5. namespace BCode_Framework_ConsoleSignalR.Hubs
  6. {
  7. //定义客户端调用服务端方法的名称,如果没有定义注意客户端会自动把服务端方法的首字母改为小写
  8. [HubName("serviceMonitorHub")]
  9. public class ServiceMonitorHub:Hub
  10. {
  11. //当客户端与服务器建立连接后执行的方法
  12. public override Task OnConnected()
  13. {
  14. //获取客户端ID
  15. Console.WriteLine("{0}已连接", Context.ConnectionId);
  16. //服务端往客户端发送数据ServerSendData方法为客户端定义的方法
  17. Clients.Client(Context.ConnectionId).ServerSendData("服务端与客户端:" + Context.ConnectionId + "成功建立连接!");
  18. return base.OnConnected();
  19. }
  20. //客户端执行服务器端的方法
  21. [HubMethodName("ClickSendData")]
  22. public void ClickSendData(string msg)
  23. {
  24. Console.WriteLine("接收到客户端" + Context.ConnectionId + "发送的数据:" + msg);
  25. }
  26. }
  27. }

6、添加Startup启动类

  1. using Microsoft.Owin.Cors;
  2. using Owin;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Linq;
  6. using System.Text;
  7. using System.Threading.Tasks;
  8.  
  9. namespace BCode_Framework_ConsoleSignalR
  10. {
  11. class Startup
  12. {
  13. public void Configuration(IAppBuilder app)
  14. {
  15. app.UseCors(CorsOptions.AllowAll);
  16. app.MapSignalR();
  17. }
  18. }
  19. }

7、客户端调用

web端引用NuGet包(Microsoft.AspNet.SignalR.JS)

  1. <script src="~/Scripts/jquery-1.6.4.min.js"></script>
  2. <script src="~/Scripts/jquery.signalR-2.4.1.min.js"></script>
  3. <script src="http:127.0.0.1:1010/SignalR/Hubs"></script>
  4. <div>
  5. <input id="txt_value" type="text" />
  6. <input id="btn_send" type="button" value="发送" />
  7. <label id="lbl_msg"></label>
  8. </div>
  9. <script>
  10. var KeyValue = "";
  11. var app = null;
  12. var Connectioned = false;
  13. $(function () {
  14. if (!Connectioned) {
  15. $.connection.hub.url = "http:127.0.0.1:1010/SignalR/Hubs";
  16. app = $.connection.serviceMonitorHub;
  17. }
  18. if (app != null) {
  19. app.client.ServerSendData = function (msg) {
  20. $("#lbl_msg").append("<br/>" + msg);
  21. }
  22. $.connection.hub.start()
  23. .done(function () {
  24.  
  25. $('#btn_send').click(function () {
  26. connected = true;
  27. console.log('Now connected, connection ID=' + $.connection.hub.id);
  28. app.server.ClickSendData($("#txt_value").val());
  29. })
  30.  
  31. })
  32. .fail(function () {
  33. console.log('Not fount connect');
  34. })
  35. }
  36.  
  37. })
  38. </script>

8、测试结果

学习使用SignalR的更多相关文章

  1. Asp.net core 学习笔记 SignalR

    refer : https://kimsereyblog.blogspot.com/2018/07/signalr-with-asp-net-core.html https://github.com/ ...

  2. 一步一步学习SignalR进行实时通信_9_托管在非Web应用程序

    原文:一步一步学习SignalR进行实时通信_9_托管在非Web应用程序 一步一步学习SignalR进行实时通信\_9_托管在非Web应用程序 一步一步学习SignalR进行实时通信_9_托管在非We ...

  3. signalr中Group 分组群发消息的简单使用

    前一段时间写了几篇关于signalr的文章 1.MVC中使用signalR入门教程 2.mvc中signalr实现一对一的聊天 3.Xamarin android中使用signalr实现即时通讯 在平 ...

  4. 使用ASP.NET MVC Web SignalR 构建单身聊天室(一)

    前言:本系列的头章,想要带大家一起学习Web SignalR,那它是什么呢?ASP .NET SignalR 是一个ASP .NET 下的类库,可以在ASP .NET 的Web项目中实现实时通信.什么 ...

  5. WinForm中 Asp.Net Signalr消息推送测试实例

    p{ text-align:center; } blockquote > p > span{ text-align:center; font-size: 18px; color: #ff0 ...

  6. 客户端-服务器端互动比较与原生实例(比较ajax,server-sent event,websocket/netsocket)

    昨日学习了websocket的原生实例,觉得有必要把几种常见的客户端-服务器端无刷新交互形式列举比较: 一.Ajax:客户端决定何时主动向Server端发请求 如:无刷新评论.无刷新更换图片. 主要目 ...

  7. 一步一步学习SignalR进行实时通信_1_简单介绍

    一步一步学习SignalR进行实时通信\_1_简单介绍 SignalR 一步一步学习SignalR进行实时通信_1_简单介绍 前言 SignalR介绍 支持的平台 相关说明 OWIN 结束语 参考文献 ...

  8. 一步一步学习SignalR进行实时通信_8_案例2

    原文:一步一步学习SignalR进行实时通信_8_案例2 一步一步学习SignalR进行实时通信\_8_案例2 SignalR 一步一步学习SignalR进行实时通信_8_案例2 前言 配置Hub 建 ...

  9. 一步一步学习SignalR进行实时通信_7_非代理

    原文:一步一步学习SignalR进行实时通信_7_非代理 一步一步学习SignalR进行实时通信\_7_非代理 SignalR 一步一步学习SignalR进行实时通信_7_非代理 前言 代理与非代理 ...

随机推荐

  1. JavaWeb之数据库连接池

    时间:2016-12-2 23:56 --DBCP连接池连接池参数(所有连接池参数都有默认值):    初始大小    最小空闲连接数    增量    最大空闲连接数    最大连接数    最长等 ...

  2. netty系列之:轻轻松松搭个支持中文的服务器

    目录 简介 netty的HTTP支持 netty中使用HTTP的原理 100 (Continue) Status 为netty搭建HTTP服务器 总结 简介 之前讲了那么多关于netty的文章,都是讲 ...

  3. HCNP Routing&Switching之OSPF LSA类型

    前文我们了解了OSPF中的虚连接相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15202348.html:今天我们来聊一聊OSPF数据包中LSA类型相 ...

  4. Spring系列之事物是如何管理的

    前言 我们都知道Spring给我们提供了很多抽象,比如我们在操作数据库的过程中,它为我们提供了事物方面的抽象,让我们可以非常方便的以事物方式操作数据库.不管你用JDBC.Mybatis.Hiberna ...

  5. Linux centos7 -bash: pstree: 未找到命令

    2021-08-12 1. 命令简介pstree命令将所有行程以树状图显示,树状图将会以 pid (如果有指定) 或是以 init 这个基本行程为根 (root),如果有指定使用者 id,则树状图会只 ...

  6. tomcat漏洞总结

    描述 Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache.Sun 和其他一些公司及个人共同开发而成.由 ...

  7. Linux 安装 Harbor 私有镜像仓库

    下载 最新发行:https://github.com/goharbor/harbor/releases # 下载文件 wget https://github.com/goharbor/harbor/r ...

  8. Python脚本导出AWS EC2资源清单

    环境需求 单位现在每隔一段时间需要核对一下 AWS 正在运行的 EC2 资源清单,为了避免核对失误以及重复性的工作,打算用脚本来解决这一重复性的工作.大概思路为 通过 AWS AK.SK 来索取 AW ...

  9. Docker容器管理——进入容器命令

    一.docker exec 命令(这个命令的本质就是让docker exec替我在容器执行一条命令,当执行的命令是/bin/bash的时候就是执行一条登陆命令,则会进入容器内部) 1.让docker ...

  10. Hexo+Butterfly主题美化

    前言 本博客基于Hexo框架搭建,用到 hexo-theme-butterfly 主题(本人博客Butterfly版本3.4.0),hexo-theme-butterfly是基于Molunerfinn ...