.Net Core6+Vue3使用Signalr初体验

Signalr初体验

之前听过Signalr的大名
可以用于Web聊天和站内通知等
不过一直也没有使用过
最近在再跟着杨中科大佬学习
刚好他也讲到了Signalr
做一个学习记录吧

1.首先创建一个WebApi项目
在这里插入图片描述
2.新建MyHub类并继承Hub
Hub引用using Microsoft.AspNetCore.SignalR命名空间
**全新的界面设计**
创建SendPublicMessage类,用于服务器将消息发送给客户端

public Task SendPublicMessage(string msg)
{
string connId= Context.ConnectionId;
string msgToSend = $“{connId}{DateTime.Now}:{msg}”;
return Clients.All.SendAsync(“ReceivePublicMsg”, msgToSend);
}

3.Program.cs配置文件
在这里插入图片描述
在这里插入图片描述

builder.Services.AddSignalR();

app.MapHub(“/MyHub”);

不知道为啥< MyHub >这个显示不出来,注意添加泛型使用~

继续添加对于跨域的代码
在这里插入图片描述

string[] urls = new[] { “http://localhost:5173” };
builder.Services.AddCors(options =>
options.AddDefaultPolicy(builder => builder.WithOrigins(urls)
.AllowAnyMethod().AllowAnyHeader().AllowCredentials())
);

app.UseCors();

4.前端代码
在你需要创建项目的文件路径上输入cmd
然后在cmd上输入

npm init vue@latest

按照相应的步骤去创建就好了
创建成功后,其他不变,就直接在Helloword界面上改就好了
在这里插入图片描述

<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 setup>
import { ref, reactive,onMounted} from 'vue'
import * as signalR from "@microsoft/signalr";
const state = reactive({
  userMessage: '',
  messages: []
})

var connection;
 
const txtMsgOnkeypress = async (e) => {
  if (e.key !== 'Enter') return;
  else{
   await connection.invoke("SendPublicMessage", state.userMessage);//客户端向服务器端发送消息
   state.userMessage = '';
  }
}

 onMounted(() => {
  //skipNegotiation 跳过协商  transport指定传输方式
  const options = { skipNegotiation: true, transport: signalR.HttpTransportType.WebSockets  };
  connection = new signalR.HubConnectionBuilder()
                    .withUrl('https://localhost:7095/MyHub',options)
                    .withAutomaticReconnect().build();
  connection.start();
   connection.on("ReceivePublicMsg", (message) => {
    //监听服务器端发送过来的消息
   state.messages.push(message);
 })
 })

</script>

<style scoped>
h1 {
  font-weight: 500;
  font-size: 2.6rem;
  position: relative;
  top: -10px;
}

h3 {
  font-size: 1.2rem;
}

.greetings h1,
.greetings h3 {
  text-align: center;
}

@media (min-width: 1024px) {
  .greetings h1,
  .greetings h3 {
    text-align: left;
  }
}
</style>

最后运行的效果就是输msg,将输入的消息添加到messages数组中
在这里插入图片描述
需要注意的是
监听方法和回调函数都要一致,避免报错
在这里插入图片描述
在这里插入图片描述

  • 11
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值