SignalR基本认识以及使用

什么是WebSocket、SignalR

WebSocket

1、WebSocket基于TCP协议,支持二进制通信,双工通信。 2、性能和并发能力更强。 3、WebSocket独立于HTTP协议,不过我们一般仍然把WebSocket服务器端部署到Web服务器上,因为可以借助HTTP协议完成初始的握手(可选),并且共享HTTP服务器的端口(主要)。

SignalR

1、ASP.NET Core SignalR(以下简称SignalR),是.NET Core平台下对WebSocket的封装。 2、Hub(集线器),数据交换中心。

服务器向客户端发送数据

1、需求:Web聊天;站内通知。 2、传统HTTP:只能客户端主动发送请求。 3、传统方案:长轮询(Long Polling):其缺点是浏览器先向服务器端发送Ajax请求,但是服务器端不立即给浏览器端发送响应,而是一直挂起这个请求,直到服务器端有需要推送给客户端的消息,服务器端才把要推送的消息作为响应发送给浏览器。由于Http并不是为这种长轮询机制设计的,因此长轮询对服务器的资源消耗非常大,而且由于http是文本传输协议,因此数据传输效率低。

SignalR的基本使用

创建一个继承自Hub的类
 using Microsoft.AspNetCore.SignalR;
 ​
 namespace SignalRStudy.Hubs
 {
     public class ChatRoomHub : Hub
    {
         //SignalR的基本使用
 ​
         public Task SendPublicMessage(string messgae)
        {
             //获取当前连接id
             var connid = this.Context.ConnectionId;
             var msg = $"{connid}:{DateTime.Now}发送了{messgae}";
             //SendAsync 是对SendCoreAsync的封装
             //对所有人发送消息 只有一个异步方法可以 不写async 和 await
             //ReceivePublicMessage 为前端接受消息方法
             var res = Clients.All.SendAsync("ReceivePublicMessage", msg);
             return res;
        }
 ​
    }
 }
Program
 //1.在builder.Build(); 之前添加跨域白名单 
 builder.Services.AddSignalR();
 ​
 //允许访问的白名单
 string[] urls = new[] { "http://localhost:3000" };
 builder.Services.AddCors(options =>
     options.AddDefaultPolicy(builder => builder.WithOrigins(urls)
        .AllowAnyMethod().AllowAnyHeader().AllowCredentials())
 );
 var app = builder.Build();
 ​
 //2.允许跨域 在UseHttpsRedirection之前Use
 app.UseCors();
 app.UseHttpsRedirection();
 ​
 //3.
 //添加对应的Hub请求路线
 app.MapHub<ChatRoomHub>("/Hubs/ChatRoomHub");

编写前端项目。

安装SignalR的JavaScript客户端SDK:npm install @microsoft/signalr

vue3我也不怎么会,这个后续再慢慢学习,只是单纯的hello word页面改写的

 <template>
     <input type="text"  v-model="state.userMessage" v-on:keypress="txtMsgOnkeypress"/>
     <div><ul>
         <li v-for="(msg,index) in state.messages" :key="index">{{msg}}</li>
     </ul></div>
 </template>
 <script>
     import { reactive, onMounted } from 'vue';
     import * as signalR from '@microsoft/signalr';
     let connection;
     export default {name: 'Login',
         setup() {
             const state = reactive({ userMessage: "", messages: [] });
             const txtMsgOnkeypress = async function (e) {
                 if (e.keyCode != 13) return;
                 await connection.invoke("SendPublicMessage", state.userMessage);
                 state.userMessage = "";
            };
             onMounted(async function () {
                 connection = new signalR.HubConnectionBuilder()
                    .withUrl('https://localhost:7298/Hubs/ChatRoomHub')
                    .withAutomaticReconnect().build();
                 await connection.start();
                 connection.on('ReceivePublicMessage', msg => {
                     state.messages.push(msg);
                });
            });
             return { state, txtMsgOnkeypress };
        },
    }
 </script>

测试发送消息成功

本文内容大部分都为杨中科老师《ASP.NET Core技术内幕与项目实战》一书中内容,此文只是做学习记录,如有侵权,联系立马删除。

 

SignalR基本认识以及使用的更多相关文章

  1. SignalR系列续集[系列8:SignalR的性能监测与服务器的负载测试]

    目录 SignalR系列目录 前言 也是好久没写博客了,近期确实很忙,嗯..几个项目..头要炸..今天忙里偷闲.继续我们的小系列.. 先谢谢大家的支持.. 我们来聊聊SignalR的性能监测与服务器的 ...

  2. ABP文档 - SignalR 集成

    文档目录 本节内容: 简介 安装 服务端 客户端 连接确立 内置功能 通知 在线客户端 帕斯卡 vs 骆峰式 你的SignalR代码 简介 使用Abp.Web.SignalR nuget包,使基于应用 ...

  3. SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=》提升)

     SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=>提升,5个Demo贯彻全篇,感兴趣的玩才是真的学) 官方demo:http://www.asp.net/si ...

  4. SignalR代理对象异常:Uncaught TypeError: Cannot read property 'client' of undefined 推出的结论

    异常汇总:http://www.cnblogs.com/dunitian/p/4523006.html#signalR 后台创建了一个DntHub的集线器 前台在调用的时候出现了问题(经检查是代理对象 ...

  5. 基于SignalR实现B/S系统对windows服务运行状态的监测

    通常来讲一个BS项目肯定不止单独的一个BS应用,可能涉及到很多后台服务来支持BS的运行,特别是针对耗时较长的某些任务来说,Windows服务肯定是必不可少的,我们还需要利用B/S与windows服务进 ...

  6. SignalR SelfHost实时消息,集成到web中,实现服务器消息推送

    先前用过两次SignalR,但是中途有段时间没弄了,今天重新弄,发现已经忘得差不多了,做个笔记! 首先创建一个控制台项目Nuget添加引用联机搜索:Microsoft.AspNet.SignalR.S ...

  7. SignalR系列目录

    [置顶]用SignalR 2.0开发客服系统[系列1:实现群发通讯] [置顶]用SignalR 2.0开发客服系统[系列2:实现聊天室] [置顶]用SignalR 2.0开发客服系统[系列3:实现点对 ...

  8. 基于SignalR的消息推送与二维码描登录实现

    1 概要说明 使用微信扫描登录相信大家都不会陌生吧,二维码与手机结合产生了不同应用场景,基于二维码的应用更是比较广泛.为了满足ios.android客户端与web短信平台的结合,特开发了基于Singl ...

  9. XAMARIN.ANDROID SIGNALR 实时消息接收发送示例

    SignalR 是一个开发实时 Web 应用的 .NET 类库,使用 SignalR 可以很容易的构建基于 ASP.NET 的实时 Web 应用.SignalR 支持多种服务器和客户端,可以 Host ...

  10. ABP源码分析三十二:ABP.SignalR

    Realtime Realtime是ABP底层模块提供的功能,用于管理在线用户.它是使用SignalR实现给在线用户发送通知的功能的前提 IOnlineClient/OnlineClient: 封装在 ...

随机推荐

  1. python中周日历与时间的相互转换

    python中周日历与时间的相互转换 周日历(ISO国际标准)介绍 在线周日历(2022年) 基本介绍 在开发过程中,有些汇总咨询需要以周为单位统计,所以介绍下如何进行相互转换. 使用datetime ...

  2. vim学习小结

    参考书籍<Linux 从入门到精通>第二版(刘忆智 等编著) Vim编辑器 背景:Vim的设计哲学就是让使用者能够在主键盘区完成所有工作. vim是vi的增强版本,vim分为插入和命令两种 ...

  3. protected virtual 使用

    转载摘自:https://blog.csdn.net/qq_31116753/article/details/81203416 1.使用protected访问修饰符标记的方法或字段,只能在当前类及其子 ...

  4. jenkins-构建触发器之定时构建和轮询 SCM

    前言 最近搭建自动化框架,跑自动化用例每次都得用手工点击构建任务,我们希望能每天固定时间跑,这样就不用管了,坐等收测试报告结果就行 定时构建语法 五颗星,中间用空格隔开 * * * * * 第一颗*表 ...

  5. CH32F103C8T6调试口Disable后的修复办法

    1.问题描述 因为软件编程,将CH32F103的 debug disable了,无法通过仿真器下载程序. 2. 修复 2.1 解决思路 利用厂家给的串口ISP进行下载(HUSB或者COM) 2.2 硬 ...

  6. 把excel表中的数据导入到mysql数据库中

    1.把excel表结构转化为csv,在把csv后缀改为txt文件,把txt文件另存为,把字符集编码转化成utf-8,在把txt文件转化为csv文件 注意:需要导入的数据表格头的名字要和数据库的字段名一 ...

  7. torch& tensorflow

    #torchimport torch import torch.nn as nn import torch.nn.functional as F class Net(nn.Module): def _ ...

  8. shell语句记录

    sed篇: 1. 删除指定的字符,比如 'a'-----$ sed 's/a//' file 2. 移除每一行的第一个字符----$ sed 's/^.//' file 3. 移除每一行的最后一个字符 ...

  9. 百题计划-5 codeforces 651 div2 D. Odd-Even Subsequence 二分检查

    https://codeforces.com/contest/1370/problem/D 二分检查 #include<bits/stdc++.h> using namespace std ...

  10. 蓝桥杯训练赛二-1169 问题 D: 绝对值排序

    题目描述 输入n(n<=100)个整数,按照绝对值从大到小排序后输出.题目保证对于每一个测试实例,所有的数的绝对值都不相等. 输入 输入数据有多组,每组占一行,每行的第一个数字为n,接着是n个整 ...