千家信息网

ASP.NET MVC中SignalR有什么用

发表于:2025-11-13 作者:千家信息网编辑
千家信息网最后更新 2025年11月13日,小编给大家分享一下ASP.NET MVC中SignalR有什么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、简介AS
千家信息网最后更新 2025年11月13日ASP.NET MVC中SignalR有什么用

小编给大家分享一下ASP.NET MVC中SignalR有什么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

一、简介

ASP.NET SignalR 是为 ASP.NET 开发人员提供的一个库,可以简化开发人员将实时 Web 功能添加到应用程序的过程。实时 Web 功能是指这样一种功能:当所连接的客户端变得可用时服务器代码可以立即向其推送内容,而不是让服务器等待客户端请求新的数据。--百度百科

  首先ASP.NET SignalR 是一个ASP .NET 下的类库,可以在ASP .NET 的Web项目中实现实时通信。让客户端(Web页面)和服务器端可以互相通知消息及调用方法。

  SignalR自动处理连接管理,可以让服务端同时向所有连接的客户端广播消息,比如聊天室。也可以向特定的客户端发送消息。客户端和服务器之间的连接是持久的,与传统的HTTP连接不同,它是为每个通信重新建立的。

  SignalR支持"服务器推送"功能,其中服务器代码可以使用远程过程调用(RPC)调用浏览器中的客户端代码,而不是今天在网络上常见的请求响应模型。

  总之,SignalR是一个运行在.NET 平台上的 html websocket 框架,它出现的主要目的是实现服务器主动推送(Push)消息到客户端页面

  注意:WebSocket要求服务器使用Windows Server 2012或Windows 8和.NET Framework 4.5如果不符合这些要求,SignalR将尝试使用其他传输来进行连接

二、安装

打开管理NuGet程序包,搜索SignalR,安装下面这些程序包


安装完成后程序中会多出一些引用

三、编写代码

因为用的是SignalR2,所以需要新建Startup.cs类,配置集线器,编写如下

using Microsoft.Owin;using Owin;[assembly: OwinStartup(typeof(SignalRStartup.Startup))]namespace SignalRStartup{  public class Startup  {    public void Configuration(IAppBuilder app)    {      // 配置集线器       app.MapSignalR();    }  }}

接着编写服务端的hub类

using System;using System.Collections.Generic;using System.Linq;using System.Threading.Tasks;using System.Web;using Microsoft.AspNet.SignalR;namespace signalR{  public class ServerHub : Hub  {    public void SendMsg(string message)    {      //调用所有客户端的sendMessage方法(sendMessage有2个参数)       Clients.All.sendMessage(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), message);    }  }}

创建HomoController以及其Action函数Index

using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.Mvc;namespace signalR.Controllers{  public class HomeController : Controller  {    public ActionResult Index()    {      return View();    }  }}

Index前段代码

@{   ViewBag.title = "SignaIR聊天窗口"; } 

    @section scripts { }

    运行效果,在任何一个窗口发送消息,其他所有客户端都能收到该消息。

    运行程序的时候,Web页面就与SignalR的服务建立了连接,具体的建立连接的代码就是:$.connection.hub.start()。这句代码的作用就是与SignalR服务建立连接,后面的done函数表明建立连接成功后为按钮注册了一个click事件;也可以用集线器对象chat.connextion.start()

    还记得这句吗?

    F12看到的结果

    上面的demo中的 Clients.All.sendMessage是调用所有客户端的sendMessage函数,属于群发。

    下面是一个客户端分组的demo

    服务端代码

     public void AddToRoom(string groupName, string userName)    {      //将连接添加到指定的组(Groups为HubBase中的接口属性)      Groups.Add(Context.ConnectionId, groupName);      //根据组名称获取对应客户端的组,调用该组的addUserIn方法      Clients.Group(groupName, new string[0]).addUserIn(groupName, userName);    }    public void Send(string groupName, string detail, string userName)    {      //Clients.All.addSomeMessage(detail);//群发给所有      //调用客户端某一个组的addSomeMessage      Clients.Group(groupName, new string[0]).addSomeMessage(groupName, detail, userName);    }

    客户端代码

     chat.client.addSomeMessage = function(groupId, detail, userName) {        console.info("广播消息:" + detail);        $("#contentMsg").append("
  • " + userName + ": " + detail + "
  • "); }; chat.client.addUserIn = function(groupId, userName) { $("#contentMsg").append("
  • " + userName + "进入"+groupId+"号聊天室!
  • "); }; $.connection.hub.logging = true; //启动signalr状态功能 $.connection.hub.start().done(function() { //加入聊天室 $("#joinRoom").click(function() { var groupId = $("#groupId").val(); var userName = $("#userName").val(); chat.server.addToRoom(groupId, userName); }); //发送消息 $("#send").click(function() { var detail = $("#message").val(); var groupId = $("#groupId").val(); var userName = $("#userName").val(); chat.server.send(groupId, detail, userName); }); });

    运行效果


    从上面两张图可以看出,客户端实现了分组

    以上是"ASP.NET MVC中SignalR有什么用"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

    客户 服务 客户端 服务器 消息 代码 功能 程序 集线器 方法 端的 页面 运行 内容 函数 篇文章 聊天室 推送 人员 实时 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 网络安全攻防读后感 云服务器内网ip哪里看 潜入式软件开发 时空猎人怎么连接服务器 服务器密码管理平台 软件开发公司服务聚顶科技好 服务器连续10占有率第一 金山区人工智能应用软件开发优点 老旧笔记本装linux当服务器 数据库查询日期条件查询 多多益善小说软件开发 互联网科技基金还可以持有吗 关系型数据库读取步骤 对网络技术应用课的心得 刀片服务器怎么查mac地址 易县租房软件开发 维护网络安全意识形态不足 果洛网络技术服务 长丰口碑好的网络技术咨询哪家好 网络安全哪里培训比较好 高速路网络安全工作总结 威海软件开发公司都有哪些 apex手游显示服务器错误 服务器装16g还是装两根8g 深信服网络安全管理系统 医疗行业网络安全规定 mis软件开发平台有哪些 南通idc服务器安装 谈谈数据库中的一二三范式 气象 数据库 标准
    0