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. linux磁盘读写速度测试

    磁盘读写速度标准 1.机械硬盘读写速度平均60---80M每秒. 2.固态硬盘不同品牌型号之间,平均大约在150---300M每秒. 3.5400转的笔记本硬盘:50-90MB每秒. 4.7200转的 ...

  2. linux忘记密码-进入单用户模式修改密码

    1.重启系统 重启可以使用命令 reboot.init 6.shutdown -r now 或点击VMware-虚拟机-电源-重新启动客户机 2.进入GRUB界面 重启后,在启动界面按上下方向键选择第 ...

  3. ENGG1310 Electricity and electronics P1.1 microelectronics & optoelectronics

    课程内容笔记,自用,不涉及任何 assignment,exam 答案 Notes for self use, not included any assignments or exams 听说这节课内容 ...

  4. 前端本地实现分页,利用了antd的分页和数组的切片

    html的结构 <a-pagination v-bind="pagination" @change="updatePage" @showSizeChang ...

  5. jquery 去除兄弟节点的class

    function chooseCategory(dicCode,obj){ $(obj).siblings('a').removeClass("active"); $(obj).a ...

  6. REPLACE,TRANSLATE

    REPLACE 1.语法 replace(string,from_str,to_str) 2.说明: 针对string,将from_str中的字符替换为to_str中字符. 3.示例: /**说明:( ...

  7. TP3.2.x判断手机端访问,同一个域名在PC和手机端展示不同模板(半独立式网站)

    首先介绍APP_STATUS内置常量,TP入口文件增加APP_STATUS 参数,  自动加载不同的项目配置文件,通过配置文件指向不同的模块 手机端访问时调用Wap手机模块,实现在手机端访问时展示出手 ...

  8. 基于Vue项目+django写一个登录的页面

    基于Vue项目+django写一个登录的页面 前端 借用了一下vue项目模板的AboutView.vue 页面组件 <template> <div class="about ...

  9. CoreText学习笔记

    CoreText是Apple系统的文字渲染引擎. 我们先看一个字符的字形图,了解一下一个字形包含的部分: 它的坐标系为窗口的左下角为视图的原点(跟Mac系统一样的坐标系),而iOS系统的坐标系为窗口的 ...

  10. skype网络异常无法登录

    在有些win7电脑上安装最新版skype软件后,打开skype软件后显示无法访问网络 检查网络及防火墙,确定无异常 最后排查原因定位到操作系统的根证书 发现系统缺少部分DigiCert的根证书 从其他 ...