在使用前我们先了解一下什么是SignalR。

(一)初识

什么是SignalR

SignalR支持websockets实时通信,那什么又是websockets,这里使用我们所熟知的HTTP来对比,首先他们都基于TCP协议。

websockets 双工通信 支持二进制通信
HTTP 单工通信 支持文件等

从表中我们看到websockets支持二进制通信,这就说明了性能和并发能力更强,其次websockets可以借助HTTP完成初始握手,并且共享HTTP的服务器端口,也就是说HTTP使用的80端口,那么websockets也同样可以使用80端口。 

SignalR的使用场景

1、各种软件主动发送推送信息(如手机通知栏中的各种广告和提示)

2、对软件的监控面板(如你进入到了移动app手机通知栏中显示你的话费余额等信息)

3、聊天应用

(二).NET中使用SignalR

在.NET中微软有一个为 SignalR 应用程序提供类:

Microsoft.AspNetCore.SignalR

该类中有一个基类Hub类,我们需要创建一个方法继承自Hub这个类,在Web Api项目中我这里创建一个Myhub继承自Hub。这里需要引入命名空间:

using Microsoft.AspNetCore.SignalR;

public class Myhub : Hub
{
    public Task SendPublicMsg(string msg)
    {
        string msgToSend = msg;
        return Clients.All.SendAsync("publicMsgReceived", msgToSend);
    }
}

 这个方法的作用是前端输入什么,我们后端就返回什么,需要注意双引号中的内容我们后面需要使用(publicMsgReceived)。

接下来我们需要在program.cs文件中引入中间件调用SignalR。

builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
builder.Services.AddSignalR();//调用SignalR
builder.Services.AddMemoryCache();

 同时在program.cs文件中需要配置一个访问地址。

app.MapHub<Myhub>("/Myhub")括号里面随便写这是一个地址名称,记住这个名称就行。

app.UseCors();

app.UseHttpsRedirection();

app.UseAuthorization();

app.MapHub<Myhub>("/Myhub");//后面前端使用的一个地址

app.MapControllers();

app.Run();

到这里后端就简单配置完成了。

(三)在VUE中使用后端配置的SignalR

 vue中使用我们首先要通过npm安装SignalR

npm install @microsoft/signalr

 在vue项目中引入

import * as signalR from '@microsoft/signalr';

在methods中我们定义两个方法一个用于连接后端生命周期调用,一个用于调用后端点击事件。

需要注意的三个地方:

1、.withUrl('https://localhost:44334/Myhub')括号里面的地址是后端的域名加上我们在program.cs文件中配置的访问地址。

2、this.connection.on('publicMsgReceived',res=>{})单引号中的名称是后端myhub类中双引号的名称。

3、this.connection.invoke('SendPublicMsg', this.sigtext)单引号中是后端myhub类中的SendPublicMsg方法。

<div id="Signa">
	<button @click="sendMessage">发送</button>
	<input type="text" v-model="sigtext"/>
	<p v-for="i in msgs">{{i}}</p>
</div>
data() {
	return {
		connection: null,
		sigtext:null,
		msgs: []
	}
},
methods: {
	startConnection() {
		//创建连接
		this.connection = new signalR.HubConnectionBuilder()
			.withUrl('https://localhost:44334/Myhub') // 替换为你的SignalR服务URL
			.withAutomaticReconnect() //断开自动连接
			.build();
					
		//注册
		this.connection.on('publicMsgReceived', res=>{
			this.msgs.push(res)
		});
				
		//开始连接
		this.connection.start();
	},
			
	//调用后端方法
	sendMessage() {
		this.connection.invoke('SendPublicMsg', this.sigtext)
	}

},
created() {
	this.startConnection();
}

到这里前后端的一个简单配置就完成了。

GitHub 加速计划 / vu / vue
109
19
下载
vuejs/vue: 是一个用于构建用户界面的 JavaScript 框架,具有简洁的语法和丰富的组件库,可以用于开发单页面应用程序和多页面应用程序。
最近提交(Master分支:4 个月前 )
9e887079 [skip ci] 1 年前
73486cb5 * chore: fix link broken Signed-off-by: snoppy <michaleli@foxmail.com> * Update packages/template-compiler/README.md [skip ci] --------- Signed-off-by: snoppy <michaleli@foxmail.com> Co-authored-by: Eduardo San Martin Morote <posva@users.noreply.github.com> 1 年前
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐