SignalR 2.0 系列:开始使用SignalR 2.0

ASP.NET Core2.0使用SignalR和Redis进行实时信息推送 最终效果 准备工作和预备知识 首先先用NuGet包下载SignalR包: Microsoft.AspNetCore.SignalR 安装过后,需要得就是SignalR的JS文件,这里可以采用npm命令进行安装 npm install @aspnet/signalr 这样,在路径下面就会出现两个文件,一个是node_modules文件夹和package-lock.json文件 我们点... 阅读详情


这是微软官方SignalR 2.0教程Getting Started with ASP.NET SignalR 2.0系列的翻译,这里是第四篇:开始使用SignalR 2.0

原文: Getting Started with SignalR 2.0

PS.前面的那篇从SignalR1.0升级为2.0跳过了……只有几步,有兴趣的同学可以自己 去看 。

概述

本教程展示了如何使用SignalR2.0构建一个基于浏览器的聊天室程序。你将把SignalR库添加到一个空的ASP.NET Web应用程序中,创建用于发送消息到客户端的集线器(Hubs)类,创建一个HTML页面让用户在该页面上发送和接收聊天信息。对于如何在MVC5环境中中创建一个聊天室,请参阅 Getting Started with SignalR 2.0 and MVC 5。

SignalR是一个开源的.Net库,用于构建需要实时用户交互或实时数据更新的Web应用程序。比如社交应用,多用户在线游戏,商务协作,新闻,天气,金融或更新应用程序。以上通常被成为实时应用程序。

SignalR简化构建实时应用程序的过程。它包括一个ASP.NET服务器库和一个JavaScript客户端库,使其更易于管理客户端到服务器端的连接并推送内容更新到客户端。您可以将SignalR库添加到现有的ASP.NET应用程序以获得实时功能。

本教程将演示以下SignalR开发任务:

  • 添加SignalR库到ASP.NET Web应用程序
  • 建立一个集线器类来推送更新内容到客户端
  • 建立一个.Net开放Web接口(OWIN)启动类来配置应用程序
  • 在网页中使用SignalR jQuery库发送和显示更新消息

下面的屏幕截图显示了在浏览器中运行的聊天应用程序,每个新加入聊天室的用户都可以随意发言。

设置项目

本节说明如何使用VS2013及SignalR 2.0库来创建一个空的ASP.NET WEB引用程序并向其中添加SignalR,以创建聊天室。

1.在VS2013中创建一个新的WEB应用程序。

2.在新的ASP.NET项目窗口中,选择空项目并确定创建。

3.在解决方案资源管理器中,右击该项目,选择添加—新建项,选择SignalR集线器类(v2),命名为ChatHub.cs并添加,如下图:

这一步将创建ChatHub类,并将一组SignalR脚本和程序集引用添加到项目中。

注意:您还可以通过NuGet来添加SignalR到项目中,通过打开工具—库软件包管理器—包管理器控制台 ,并运行一个命令:

  install-package Microsoft.AspNet.SignalR

如果您使用包管理器控制台来添加SignalR,请在添加后再执行创建ChatHub类这一步。

4.在解决方案资源管理器中,展开脚本文件夹,可以看到项目已经添加了jQuery及SignalR的JS引用。

5.用编辑你的ChatHub文件,删除Hello方法并添加Send方法,如下面的代码:

using System;
using System.Web;
using Microsoft.AspNet.SignalR;

namespace SignalRChat
{
    public class ChatHub : Hub
    {
        public void Send(string name, string message)
        {
            // Call the broadcastMessage method to update clients.
            Clients.All.broadcastMessage(name, message);
        }
    }
}

6.在解决方案资源管理器中,右击该项目,然后单击添加—新建项—OWIN启动类,将类命名为Startup并添加。

7.在启动类的 配置方法中添加SignalR的映射,如下面的代码:

using Microsoft.Owin;
using Owin;

[assembly: OwinStartup(typeof(SignalRChat.Startup))]

namespace SignalRChat
{
    public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            // 有关如何配置应用程序的详细信息,请访问 http://go.microsoft.com/fwlink/?LinkID=316888
            app.MapSignalR();
        }
    }
}

8.在解决方案资源管理器中,右键单击该项目,然后单击添加—新建项—HTML页面,命名为index.html并添加。

9.用下面的代码替换掉HTML中的。

DOCTYPE html>
<html>
<head>
    <title>SignalR Simple Chattitle>
    <style type="text/css">
        .container {
            background-color: #99CCFF;
            border: thick solid #808080;
            padding: 20px;
            margin: 20px;
        }
    style>
head>
<body>
    <div class="container">
        <input type="text" id="message" />
        <input type="button" id="sendmessage" value="Send" />
        <input type="hidden" id="displayname" />
        <ul id="discussion">
        ul>
    div>
    
    
    <script src="Scripts/jquery-1.6.4.min.js" >script>
    
    <script src="Scripts/jquery.signalR-2.0.2.min.js">script>
    
    <script src="signalr/hubs">script>
     
    <script type="text/javascript">
        $(function () {
            // Declare a proxy to reference the hub. 
            var chat = $.connection.chatHub;
            // Create a function that the hub can call to broadcast messages.
            chat.client.broadcastMessage = function (name, message) {
                // Html encode display name and message. 
                var encodedName = $('
  
'
).text(name).html(); var encodedMsg = $( '
'
).text(message).html(); // Add the message to the page. $( ' #discussion').append( '
  • '
  • + encodedName + ': ' + encodedMsg + ''); }; // Get the user name and store it to prepend to messages. $('#displayname').val(prompt('Enter your name:', '')); // Set initial focus to message input box. $('#message').focus(); // Start the connection. $.connection.hub.start().done(function () { $('#sendmessage').click(function () { // Call the Send method on the hub. chat.server.send($('#displayname').val(), $('#message').val()); // Clear text box and reset focus for next comment. $('#message').val('').focus(); }); }); }); script> body> html>

注意:如果你使用包管理器来安装了SignalR,请核对脚本目录中的SignalR脚本文件名和上面HTML中代码所引用的是否一致,比如下图:

11.保存全部项。

运行示例

1.按下F5在调试模式下运行该项目,如果一切正常,HTML会在浏览器中打开并提示一个对话框。

2.输入用户名并确定。

3.复制这个浏览器中的URL,打开一个新的浏览器实例,在另一个浏览器中,输入一个新用户名。

4.在每个浏览器实例中添加评论并发送,评论将被发送到所有浏览器的页面中。

注意:这个简单的聊天室没有在服务器上维护一个聊天上下文,所有发送的评论将实时广播给打开了页面的所有浏览器,所以新加入的用户无法看到以前的历史记录。

5.在解决方案资源管理器中,检查正在运行的应用程序的脚本文件,你可以看到SignalR库动态生成的Hub脚本文件,该文件管理jQuery脚本和服务器代码之间的通讯。

回顾

SignalR聊天室程序演示了两个基本的SignalR开发任务:在服务器端创建一个集线器作为主要协调对象,并使用SignalR和jQuery来发送和接收评论。

SignalR集线器(Hub)

在代码示例中的ChatHub类派生自Microsoft.AspNet.SignalR.Hub类。是最通常的建立SignalR应用程序的方法就是从Hub类派生。 你可以创建你的集线器类的公共方法,然后从网页中的脚本调用它们来访问这些方法。

这本示例中,客户端调用ChatHub.Send来发送新评论。反之,集线器通过调用Clients.All.broadcastMessage来将新评论发送至所有客户端。

Send方法演示了使用集线器的概念:

  • 在集线器上建立公共方法,使客户端可以调用它们。
  • 使用使用Microsoft.AspNet.SignalR.Hub.Clients动态属性访问连接到该集线器的所有客户端。
  • 调用客户端方法(比如broadcastMessage函数)来更新客户端。

SignalR和jQuery

HTML页面展示了如何使用SignalR jQuery库与SignalR集线器通讯,即定义了一个代理引用集线器,声明一个函数可以让服务器推送内容到客户端,并且开始实时连接以发送消息到集线器上。

下面的代码定义了一个集线器代理的引用。

var chat = $.connection.chatHub;

注意:在JS中引用服务器类及成员应当使用驼峰(camel)式拼写法。改代码示例使用chatHub引用了服务器端的ChatHub。

下面的代码演示了如何创建一个回调函数,服务器上的集线器类调用这个函数来推送内容并更新到每个客户端。前两行代码表示将输入的内容进行HTML编码,作为一个简单的防止脚本注入的方法。

chat.client.broadcastMessage = function (name, message) {
        // Html encode display name and message. 
        var encodedName = $('
  
'
).text(name).html(); var encodedMsg = $( '
'
).text(message).html(); // Add the message to the page. $( '#discussion').append( '
  • '
  • + encodedName + ': ' + encodedMsg + ''); };

下面的代码显示了如何打开与集线器的连接。该代码启动连接,然后传递一个函数来处理HTML页面上发送按钮的点击事件。

$.connection.hub.start().done(function () {
        $('#sendmessage').click(function () {
            // Call the Send method on the hub. 
            chat.server.send($('#displayname').val(), $('#message').val());
            // Clear text box and reset focus for next comment. 
            $('#message').val('').focus();
        });
    });

注意:此方法可确保SignalR在事件句柄处理之前就建立好通讯连接。

下一步

您已经了解到SignalR框架是如何构建起一个实时Web应用程序的,您还了解并演练了几个开发任务:添加SignalR库到Web应用程序中,创建一个集线器类及如何从集线器发送、接收消息。

要了解更多,请参阅以下连接:

作者: 帕特里克·弗莱彻   -帕特里克·弗莱彻是ASP.NET开发团队的程序员,作家,目前正在SignalR项目工作。


前端vue中使用signalr 本文介绍了SignalR在前端开发中的完整使用流程:从引入库文件、初始化连接到实际应用场景。主要内容包括:1) 通过npm安装SignalR客户端库并引入;2) 使用HubConnectionBuilder配置连接参数(URL、日志、重连策略等);3) 启动连接的方法;4) 定义客户端接收服务端消息的回调函数;5) 调用服务端方法的发送消息方式。文章还提供了典型应用场景(聊天、数据更新、通知系统)和完整代码示例,帮助开发者快速实现实时通信功能。配置说明详细涵盖了传输方式、认证、日志等关键参数。 阅读详情

相关推荐

Python之signal模块详解

先简单说一下Signal是啥.(如果想直接使用可以不看)Signal翻译过来中文就是信号- -当然, 本身他就是Linux系统编程中非常重要的概念, 信号机制是进程之间传递消息的一种机制,其全称为软中断信号作用是通知进程发生了异步事件。进程之间可以调用系统来传递信号, 本身内核也可以发送信号给进程, 告诉该进程发生了某个事件.注意,信号只是用来通知某进程发生了什么事件,并不给该进程传递任何数据。接...

信息安全领域优质创作者|操作系统领域专家 3万+

[渣译文] SignalR 2.0 系列: 开始使用SignalR 2.0

英文渣水平,大伙凑合着看吧…… 这是微软官方SignalR 2.0教程Getting Started with ASP.NET SignalR 2.0系列的翻译,这里是第四篇:开始使用SignalR 2.0 原文:Getting Started with SignalR 2.0 PS.前面的那篇从SignalR1.0升级为2.0跳过了……只有几步,有兴趣的同学可以自己去看。 概述 本教程...

weixin_33868027的博客 157

async-signalr-client:Python异步SignalR DotNetCore客户端

异步信号客户端 Python异步SignalR DotNetCore客户端 该库使用asyncio实现SignalR JSON协议。 注意:目前不支持流媒体。 启动客户端 from async_signalr_client . connection import Connection async def main (): # This will create the connection instance but will not launch any connection connection = Connection ( "ws://127.0.0.1:5000/chat" ) # This will establish the connection and negotiate protocol await connection . start ()

开源框架SignalR

本文将介绍SignalR,一种用于实现实时Web应用程序的开源库。SignalR支持双向通信,可以实现客户端和服务器之间的消息传递,同时具有易于使用、可扩展性和高吞吐量等优点。本文将讨论SignalR的定义、优缺点、安装部署方法以及示例代码,并探讨了SignalR可能存在的局限性。读者可以通过本文进一步了解和学习如何使用SignalR来构建实时Web应用程序

qq_40796482的博客 856

signalrcore:SignalR Core python客户端

SignalR核心客户端 链接 开发 测试服务器将在可用,并且需要docker compose。 git clone https://github.com/mandrewcito/signalrcore-containertestservers cd signalrcore-containertestservers docker-compose up cd ../signalrcore make tests 已知的问题 与关闭从websocket-client库继承的套接字有关的问题。 由于这个问题,我无法将库更新到高于websocket-client 0.54.0的版本。 我正在努力解决该问题,目前已对其进行了修补(错误编号1。引发异常,然后对异常进行处理以防止发生错误)。 如果我更新weboscket库,我会陷入错误2,在本地计算机上我无法重现它,但在travis构建上会失败(有时是

Python库 | signalr-client-threads-0.0.12.tar.gz

python库。 资源全名:signalr-client-threads-0.0.12.tar.gz

史上最全面的SignalR系列教程-1、认识SignalR

SignalR 是什么? SignalR 是一个面向 ASP.NET 开发人员的库,可简化将实时 web 功能添加到应用程序的过程。 实时 web 功能是让服务器代码将内容推送到连接的客户端立即可用,而不是让服务器等待客户端请求新数据的能力。 SignalR 是一个集成的客户端与服务器库,基于浏览器的客户端和基于 ASP.NET 的服务器组件可以借助它来进行双向多步对话。 换句话说,该对话可不受限...

.NET快速开发框架 5万+

Python库 | signalr_client_aio-0.0.1.4-py2.py3-none-any.whl

python库,解压后可用。 资源全名:signalr_client_aio-0.0.1.4-py2.py3-none-any.whl

SignalR 2.0 系列: 开始使用SignalR 2.0

这是微软官方SignalR 2.0教程Getting Started with ASP.NET SignalR 2.0系列的翻译,这里是第四篇:开始使用SignalR 2.0 原文:Getting Started with SignalR 2.0 PS.前面的那篇从SignalR1.0升级为2.0跳过了……只有几步,有兴趣的同学可以自己去看。 概述 本教程展示了如何使用SignalR2.0...

weixin_30525825的博客 224

YOLOv10注意力革新:小波域注意力(WDA)如何实现多尺度特征精准聚焦

本文深入解析YOLOv10中的小波域注意力(WDA)机制,探讨其如何通过频域分解与动态聚焦实现多尺度特征精准提取。WDA模块结合离散小波变换与注意力机制,显著提升小目标检测性能,在VisDrone数据集上AP提升达12.6%。文章详细介绍了两种集成方案及代码实现,为计算机视觉开发者提供实用指南。

weixin_29079671的博客 251

ServiceNow Discovery & CMDB Interview Questions and Answers (2025)

【代码】ServiceNow Discovery & CMDB Interview Questions and Answers (2025)

weixin_47584092的博客 910

SignalR 2.0 系列: SignalR 自托管主机

这是微软官方SignalR 2.0教程Getting Started with ASP.NET SignalR 2.0系列的翻译,这里是第六篇:SignalR 自托管主机 原文:SignalR Self-Host PS.前面的那篇在MVC5上使用SignalR跳过了……MVC5跟HTML的实现完全一样,只是将HTML的脚本放在View里面了,这里就跳过了。有兴趣的同学可以自己去看。 概述 ...

飞鹰的专栏 410

Jetson Orin NX深度学习环境配置全攻略:从JetPack到PyTorch避坑指南

本文提供Jetson Orin NX深度学习环境配置的完整避坑指南。重点讲解如何正确利用JetPack SDK作为系统基石,使用Miniforge管理Python环境,并安装与CUDA版本严格匹配的PyTorch特供版本。通过详细的步骤和验证方法,帮助开发者在ARM架构的嵌入式平台上高效搭建稳定的AI开发工作站。

yolo5detector的博客 272

SignalR 2.0 系列:SignalR的服务器广播

英文渣水平,大伙凑合着看吧…… 这是微软官方SignalR 2.0教程Getting Started with ASP.NET SignalR 2.0系列的翻译,这里是第八篇:SignalR的服务器广播 原文:Tutorial: Server Broadcast with SignalR 2.0 概述 VS可以通过Microsoft.AspNet.SignalR.Sample...

a732587507的博客 205

Python实战:用nltk库5步搭建你的第一个n-gram文本生成器(附古诗生成案例)

本文详细介绍了如何使用Python的nltk库5步搭建n-gram文本生成器,并附有古诗生成案例。从环境准备、n-gram原理讲解到完整实现,逐步指导开发者掌握自然语言生成技术。特别针对中文古诗生成进行了优化,包括分词处理和韵律控制,帮助读者快速上手文本生成项目。

weixin_29090089的博客 202

PCL 区域生长分割【2026最新版】

区域生长算法原理介绍、代码实现以及一个具体实验场景的应用案例进一步实现将分割结果的分类保存至本地文件夹。最近一次更新时间为:2026年5月4日。

点云侠的博客 40万+

学习SignalR(2):开始使用SignalR 2.0

按照[渣译文] SignalR 2.0 系列: 开始使用SignalR 2.0的教程建立简单聊天室 创建SignalRChat项目后,引用的是SignalR2.0.0的库 通过Nugget可以更新SignalR到2.1.2,还可以更新语言包 更新之后 是不是很舒服? 最终效果 转载于:https://www.cnblogs.com/purplebolt/p/412211...

weixin_34380781的博客 103

Android 系统状态栏中实现高斯模糊背景

至此,我们已经完成了在 Android 系统的 SystemUI 中实现高斯模糊背景的过程。通过以上的布局和代码修改,我们可以在状态栏中看到具有高斯模糊效果的背景。同时,为了在不同版本的 Android 系统上适配高斯模糊效果,可能需要进行一些额外的代码调整和兼容性处理。希望本文能够帮助你理解如何在 Android 系统的 SystemUI 中实现高斯模糊背景,并通过提供的源代码进行相应的开发和调试。首先,我们需要在 SystemUI 的布局文件中添加一个用于展示高斯模糊背景的视图。属性来开启模糊效果。

CyberSparkZ的博客 869

史上最全面的SignalR系列教程-2、SignalR 实现推送功能-永久连接类实现方式

1、概述 通过上篇史上最全面的SignalR系列教程-1、认识SignalR文章的介绍,我们对SignalR技术已经有了一个全面的了解。本篇开始就通过SignalR的典型应用的实现方式做介绍,例子虽然简单,但麻雀虽小五脏俱全。可以以此为基础,扩展到实际应用中。 SignalR 的实现机制与.NET WCF 或 Remoting 是相似的,都是使用远程代理来实现。在具体使用上,有两种不同通信模型:P...

.NET快速开发框架 3652

YOLOv9电力巡检实战:绝缘子破裂/鸟巢识别+无人机自动定位

摘要:本文聚焦电力输电线路巡检的效率与安全痛点,提出基于YOLOv9与无人机的智能巡检解决方案。针对绝缘子破裂、鸟巢等高危缺陷,通过“无人机改装-模型训练-缺陷识别-工单生成”四阶段工程落地流程,实现全自动化巡检。系统采用大疆M300无人机搭载RTK模块与Jetson边缘计算盒,结合改进YOLOv9模型实时识别5类缺陷,通过4G传输将GPS定位与缺陷数据同步至工单系统。实测表明,该方案巡检效率达50公里/天(较人工提升10倍),缺陷发现率95%(提升40%),事故预防率98%。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 1509

SAP 系统间 SSO 的真正价值,从 SM59 到可信 RFC 的安全设计

SAP S/4HANA系统间Single Sign-On(SSO)的核心价值在于集中管理通信身份与信任关系,而非仅减少密码输入。传统固定账号密码方式在系统规模扩大后会面临密码管理、审计追踪等挑战。通过SM59配置可信RFC目标系统,结合SSL证书或SAP Trusted System等强认证机制,能有效降低安全凭据暴露风险。SSO配置需配合授权对象、角色管理等建立清晰的信任边界,实现系统间安全通信的同时保持可审计性。这种方案特别适用于Fiori前端与S/4HANA后端等场景,通过可信RFC传递用户身份,避免

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1062

.net core 3.0 Signalr - 05 使用jwt将用户跟signalr关联

Signalr是以Group、Connect为核心来进行推送,比如,给某个组、某个连接来推送,但实际场景中,核心应该是某个组、某个人;然而一个人可以对应多个连接(浏览器多个tab页);本节就来介绍下自行管理人、组、连接这些关系由于signalr连接的时候不那么方便附带header和cookie(因为推送独立成一个子系统了),实际实现中采用以url query的形式附带上token,然后服务器端自定...

xiexingen的专栏 1662

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

SignalR使用demo

 Set up the Project This section shows how to use Visual Studio 2013 and SignalR version 2.0 to create an empty ASP.NET web application, add SignalR, and create the chat application. Prerequisi

天高任鸟飞 2032

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

上一篇: SignalR 2.0 系列:SignalR简介
下一篇: SignalR 2.0 系列:SignalR的高频实时通讯
双鱼达摩
博客等级 码龄18年 8粉丝 4原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值