SignalIR入门

SignalIR入门

  • 简介
  • 教程
    • 1.创建项目
    • 2.添加 SignalR 客户端库
    • 3.创建 SignalR 中心
    • 4.配置 SignalR
    • 5.添加 SignalR 客户端代码
  • 效果

简介

SignalR 是一个用于构建实时 Web 应用程序的开发工具和库,它可以让服务器端代码与客户端代码之间建立双向通信。SignalR 的中文解释可以理解为 “信号传输” 或 “信号通信”。

SignalR 提供了一种简单的方式,让服务器可以向客户端发送实时更新,而无需客户端不断地发出请求。这使得开发者可以创建具有实时特性的应用程序,如在线聊天、实时游戏、协作工具等。SignalR 可以在多种平台和编程语言中使用,包括 .NET、JavaScript、Java、Python 等,因此它在跨平台的实时通信方面非常有用。

SignalR 使用不同的传输协议,如 WebSockets、Server-Sent Events(SSE)、长轮询等,以确保在各种环境中都能提供实时性能。无论是在 Web 应用、移动应用还是桌面应用中,SignalR 都为开发者提供了强大的实时通信功能。这使得用户可以在应用程序中获得即时的更新,而不必等待页面刷新或手动触发操作。

教程文档

教程

1.创建项目

在“配置新项目”对话框中,为“项目名称”输入 SignalRChat。 请务必将项目命名为 SignalRChat(包括匹配大写),以便命名空间与教程中的代码匹配。

在这里插入图片描述

2.添加 SignalR 客户端库

  1. 为“提供程序”选择“unpkg”
  2. 对于“库”,请输入 @microsoft/signalr@latest。
  3. 选择“选择特定文件”,展开“dist/browser”文件夹,然后选择 signalr.js 和 signalr.min.js。
  4. 将“目标位置”设置为 wwwroot/js/signalr/。
    选择“安装” 。

在这里插入图片描述

3.创建 SignalR 中心

在 SignalRChat 项目文件夹中,创建 Hubs 文件夹。
在 Hubs 文件夹中,使用以下代码创建 ChatHub 类:

using Microsoft.AspNetCore.SignalR;namespace SignalRChat.Hubs
{public class ChatHub : Hub{public async Task SendMessage(string user, string message){await Clients.All.SendAsync("ReceiveMessage", user, message);}}
}

4.配置 SignalR

using SignalRChat.Hubs;var builder = WebApplication.CreateBuilder(args);builder.Services.AddRazorPages();
builder.Services.AddSignalR();//添加此服务var app = builder.Build();if (!app.Environment.IsDevelopment())
{app.UseExceptionHandler("/Error");app.UseHsts();
}app.UseHttpsRedirection();
app.UseStaticFiles();app.UseRouting();app.UseAuthorization();app.MapRazorPages();
app.MapHub<ChatHub>("/chatHub");//添加此服务app.Run();

5.添加 SignalR 客户端代码

使用以下代码替换 Pages/Index.cshtml 中的内容:

@page<div class="container"><div class="row p-1"><div class="col-1">User</div><div class="col-5"><input type="text" id="userInput" /></div></div><div class="row p-1"><div class="col-1">Message</div><div class="col-5"><input type="text" class="w-100" id="messageInput" /></div></div><div class="row p-1"><div class="col-6 text-end"><input type="button" id="sendButton" value="Send Message" /></div></div><div class="row p-1"><div class="col-6"><hr /></div></div><div class="row p-1"><div class="col-6"><ul id="messagesList"></ul></div></div></div>
<script src="~/js/signalr/dist/browser/signalr.js"></script>
<script src="~/js/chat.js"></script>

在 wwwroot/js 文件夹中,使用以下代码创建 chat.js 文件:

//这是 JavaScript 严格模式的声明,它有助于捕获代码中的潜在错误,并提高代码质量。
"use strict";//这是创建 SignalR 连接的关键部分。它使用 SignalR 客户端库中的 HubConnectionBuilder 
//来创建连接对象。withUrl 方法指定了连接的目标 URL,这里是 "https://localhost:7124/chatHub",
//这应该是你的 SignalR 服务器上定义的 Hub 的地址。
var connection = new signalR.HubConnectionBuilder().withUrl("/chatHub").build();//这一行代码将 HTML 页面中 id 为 "sendButton" 的按钮设置为禁用状态,
//以防止在连接建立之前点击按钮。
document.getElementById("sendButton").disabled = true;//这是一个事件处理程序,用于处理从服务器端接收到的消息。
//当服务器端使用 SendMessge 方法发送消息时,这个事件处理程序会被触发,
//然后在页面上创建一个新的列表项(li),显示接收到的消息。
connection.on("ReceiveMessage", function (user, message) {var li = document.createElement("li");document.getElementById("messagesList").appendChild(li);li.textContent = `${user} says ${message}`;
});//这是用于建立连接的代码。connection.start() 方法尝试连接到服务器,
//如果连接成功,则启用 "sendButton" 按钮,并在连接失败时处理错误。
connection.start().then(function () {document.getElementById("sendButton").disabled = false;
}).catch(function (err) {return console.error(err.toString());
});//这段代码为 "sendButton" 按钮添加了一个点击事件监听器,
//当用户点击按钮时,它会从页面上获取用户输入的用户名和消息文本,然后使用 
//connection.invoke("SendMessage", user, message) 
//来调用服务器上的 SendMessage 方法,将消息发送给服务器。
document.getElementById("sendButton").addEventListener("click", function (event) {var user = document.getElementById("userInput").value;var message = document.getElementById("messageInput").value;connection.invoke("SendMessage", user, message).catch(function (err) {return console.error(err.toString());});event.preventDefault();
});

效果

从地址栏复制 URL,打开另一个浏览器实例或选项卡,并在地址栏中粘贴该 URL。
选择任一浏览器,输入名称和消息,然后选择“发送消息”按钮。
两个页面上立即显示名称和消息。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/96620.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

05_模板引擎

模板引擎可以让将数据和HTML模板更加友好的结合&#xff0c;省去繁琐的字符串拼接&#xff0c;使代码更加易于维护。 1 EJS 文档地址&#xff1a;https://ejs.bootcss.com/#install 1.1 安装 npm install ejs 1.2 标签语法 <% ‘脚本’ 标签&#xff0c;用于流程控制&…

【思维构造】Circle of Monsters—CF1334C

Circle of Monsters—CF1334C 思路 每一个怪兽都有两种死法&#xff1a; 直接被子弹打死先被上一个怪兽爆炸击伤&#xff0c;剩下的血量再用子弹打死 所以&#xff0c;很容易看出来第二种死法对于所有的怪兽都是最优死法&#xff08;消耗子弹最少的死法&#xff09;。我们需要…

什么测试自动化测试?

什么测试自动化测试&#xff1f; 做测试好几年了&#xff0c;真正学习和实践自动化测试一年&#xff0c;自我感觉这一个年中收获许多。一直想动笔写一篇文章分享自动化测试实践中的一些经验。终于决定花点时间来做这件事儿。 首先理清自动化测试的概念&#xff0c;广义上来讲&a…

如何搭建一个 websocket

环境: NodeJssocket.io 4.7.2 安装依赖 yarn add socket.io创建服务器 引入文件 特别注意: 涉及到 colors 的代码&#xff0c;请采取 console.log() 打印 // 基础老三样 import http from "http"; import fs from "fs"; import { Server } from &quo…

pytorch 数据载入

在PyTorch中&#xff0c;数据载入是训练深度学习模型的重要一环。 本文将介绍三种常用的数据载入方式&#xff1a;Dataset、DataLoader、以及自定义的数据加载器。 使用 Dataset 载入数据 方法&#xff1a; from torch.utils.data import Datasetclass CustomDataset(Dataset…

第九课 排序

文章目录 第九课 排序排序算法lc912.排序数组--中等题目描述代码展示 lc1122.数组的相对排序--简单题目描述代码展示 lc56.合并区间--中等题目描述代码展示 lc215.数组中的第k个最大元素--中等题目描述代码展示 acwing104.货仓选址--简单题目描述代码展示 lc493.翻转树--困难题…

JavaScript系列从入门到精通系列第十五篇:JavaScript中函数的实参介绍返回值介绍以及函数的立即执行

文章目录 一&#xff1a;函数的参数 1&#xff1a;形参如何定义 2&#xff1a;形参的使用规则 二&#xff1a;函数的返回值 1&#xff1a;函数返回值如何定义 2&#xff1a;函数返回值种类 三&#xff1a;实参的任意性 1&#xff1a;方法可以作为实参 2&#xff1a;将匿…

kafka与hbase的区别

Kafka 和 HBase 是两个不同的分布式数据存储系统&#xff0c;它们可以在大数据应用中发挥不同的作用。 Kafka 是一个高吞吐量的分布式发布订阅消息系统&#xff0c;主要用于处理实时数据流。它具有以下特点&#xff1a; 高性能&#xff1a;Kafka 能够以非常高的吞吐量和低延迟…

2023年全球市场数字干膜测量仪总体规模、主要生产商、主要地区、产品和应用细分研究报告

内容摘要 按收入计&#xff0c;2022年全球数字干膜测量仪收入大约149.2百万美元&#xff0c;预计2029年达到191.6百万美元&#xff0c;2023至2029期间&#xff0c;年复合增长率CAGR为 3.6%。同时2022年全球数字干膜测量仪销量大约 &#xff0c;预计2029年将达到 。2022年中国市…

【Spring Boot】创建一个 Spring Boot 项目

创建一个 Spring Boot 项目 1. 安装插件2. 创建 Spring Boot 项目3. 项目目录介绍和运行注意事项 1. 安装插件 IDEA 中安装 Spring Boot Helper / Spring Assistant / Spring Initializr and Assistant插件才能创建 Spring Boot 项⽬ &#xff08;有时候不用安装&#xff0c;直…

分布式事务 —— SpringCloud Alibaba Seata

文章目录 Seata 简介Seata 服务端Seata 客户端 Seata 简介 传统的单体应用中&#xff0c;业务操作使用同一条连接操作不同的数据表&#xff0c;一旦出现异常就可以整体回滚。随着公司的快速发展、业务需求的变化&#xff0c;单体应用被拆分成微服务应用&#xff0c;原来的单体…

【排序算法】冒泡排序

文章目录 一&#xff1a;排序算法1.1 介绍1.2 分类 二&#xff1a;冒泡排序2.1 基本介绍2.2 图解冒泡排序算法2.3 代码实现 三&#xff1a;算法性能分析3.1 时间复杂度3.2 空间复杂度 一&#xff1a;排序算法 1.1 介绍 排序也称排序算法(Sort Algorithm)&#xff0c;排序是将…

SpringCloud-消息组件

1 简介 了解过RabbitMQ后&#xff0c;可能我们会遇到不同的系统在用不同的队列。比如系统A用的Kafka&#xff0c;系统B用的RabbitMQ&#xff0c;但是没了解过Kafka&#xff0c;因此可以使用Spring Stream&#xff0c;它能够屏蔽地产&#xff0c;像JDBC一样&#xff0c;只关心SQ…

C# 给某个方法设定执行超时时间

C# 给某个方法设定执行超时时间在某些情况下(例如通过网络访问数据)&#xff0c;常常不希望程序卡住而占用太多时间以至于造成界面假死。 在这时、我们可以通过Thread、Thread Invoke&#xff08;UI&#xff09;或者是 delegate.BeginInvoke 来避免界面假死&#xff0c; 但是…

java ftputils 模拟测试方法 有效

前言: 最近需要开发相关ftp内进行文件的上传与下载的操作,需要使用java来实现,需要开发一个工具类进行处理; 具体代码如下: import org.apache.commons.net.ftp.FTP; import org.apache.commons.net.ftp.FTPClient; import org.slf4j.Logger; import org.slf4j.LoggerF…

el-table进阶(每条数据分行或合并)

最麻烦的还是css样式&#xff0c;表格样式自己调吧 <!-- ——————————————————————————————————根据数据拓展表格—————————————————————————————————— --> <div style"display: flex"&…

Java Spring Boot 目录结构介绍

Java Spring Boot 是一个用于简化Java应用程序开发的框架&#xff0c;它提供了一套灵活、易用的开发工具和约定&#xff0c;帮助开发者更快速地构建各种类型的Java应用程序。Spring Boot 的目录结构是一个重要的组成部分&#xff0c;它规定了如何组织和管理项目代码和资源文件。…

cpp primer笔记-010开始

下面的第5行代码可以写成第6行注释的代码#include<iostream> int main() {int v1{}, v2{};(std::cin >> v1) >> v2;//std::cin>>v1>>v2;(std::cout << v1) << " " << v2 << std::endl;return 0; }char类型在有…

oralce配置访问白名单的方法

目录 配置sqlnet.ora文件 重新加载使配置生效 注意事项 Oracle数据库安全性提升&#xff1a;IP白名单的配置方法 随着互联网的发展&#xff0c;数据库安全问题也越来越严重。Oracle是目前使用较为广泛的一款数据库管理系统&#xff0c;而IP白名单作为提升数据库安全性的有效…

深度学习——权重衰减(weight_decay)

深度学习——权重衰减&#xff08;weight_decay) 文章目录 前言一、权重衰减1.1. 范数与权重衰减1.2. 高维线性回归1.3. 从零开始实现1.3.1.初始化模型参数1.3.2. 定义L₂范数惩罚1.3.3. 定义训练代码实现1.3.4. 不管正则化直接训练1.3.5. 使用权重衰减 1.4. 简洁实现 总结 前言…