国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

ASP.NET Core+Vue3 實現(xiàn)SignalR通訊

這篇具有很好參考價值的文章主要介紹了ASP.NET Core+Vue3 實現(xiàn)SignalR通訊。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

從ASP.NET Core 3.0版本開始,SignalR的Hub已經(jīng)集成到了ASP.NET Core框架中。因此,在更高版本的ASP.NET Core中,不再需要單獨引用Microsoft.AspNetCore.SignalR包來使用Hub。
在項目創(chuàng)建一個類繼承Hub,
首先是寫一個CreateConnection方法
ConnectionId是SignalR中標識的客戶端連接的唯一標識符,
將userId和ConnectionId關聯(lián)起來,這樣就可以實現(xiàn)指定給某一個或一些用戶發(fā)送消息了。
SendMessageToUser方法用于向特定的用戶發(fā)送消息。它接受兩個參數(shù):userId表示要用于接收消息的用戶標識,message表示要發(fā)送的消息內(nèi)容。
該方法的主要作用是根據(jù)userId從內(nèi)存緩存(IMemoryCache)中獲取與之關聯(lián)的ConnectionId,然后使用Clients.Client(connectionId.ToString())方法找到對應的客戶端連接,并通過SendAsync方法將消息發(fā)送給該用戶。這樣,用戶就能收到特定的消息。

public class MyHub : Hub
{
    private readonly IMemoryCache memoryCache;

    public MyHub(IMemoryCache memoryCache)
    {
        this.memoryCache = memoryCache;
    }
    public void CreateConnection(int userId)
    {
        // 將用戶標識與 ConnectionId 關聯(lián)起來
        memoryCache.Set(userId, Context.ConnectionId);
    }
    public async Task SendMessageToUser(int userId, string message)
    {
        if (memoryCache.TryGetValue(userId, out var connectionId))
        {
            await Clients.Client(connectionId.ToString()).SendAsync("ReceiveMessage", message);
        }
    }
}

在program文件中注冊hub

//注冊signalr
builder.Services.AddSignalR();
//注冊hub  這里的路徑是我的Hub類在項目中的路徑
app.MapHub<MyHub>("/SignalR/MyHub");

ASP.NET Core+Vue3 實現(xiàn)SignalR通訊
———————————————————————————————————————————————————————————————————————————
讓后前端這里在vue項目中下載@microsoft/signalr包

npm i @microsoft/signalr --save

創(chuàng)建一個myHub.js文件

import * as signalr from '@microsoft/signalr';
const conn = new signalr.HubConnectionBuilder()
              .withUrl('http://localhost:5124/SignalR/Myhub')
              .withAutomaticReconnect()
              .build();
export default conn;

.withUrl('http://localhost:5124/SignalR/Myhub')這里的路徑一定要和在api項目中的Program配置的app.MapHub("/Signalr/Myhub");相同。
withAutomaticReconnect()用于啟用自動重連功能。這意味著如果連接斷開,SignalR將自動嘗試重新建立連接,以確保保持實時通信。
.build()方法構建并返回一個SignalR連接對象。
conn.start();和SignarlR啟動建立連接。

———————————————————————————————————————————————————————————————————————————
讓后的話這里簡單模擬了一下數(shù)據(jù)庫的登錄
Api部分

[Route("api/[controller]/[action]"), ApiController]
    public class TestController : ControllerBase
    {
        List<SysUser> userList = new List<SysUser>()
        {
            new SysUser(1,"王鶴棣","123456"),
            new SysUser(2,"吳磊","123456"),
            new SysUser(3,"趙露思","123456")
        };

        [HttpPost]
        public ActionResult Login(SysUser sysUser)
        {
            var user = userList.Where(s => s.userName == sysUser.userName && s.userPwd == sysUser.userPwd).FirstOrDefault();
            if (user is not null)
            {
                return Ok(user.userId);
            }
            return Ok("失敗");
        }
    }
    public record SysUser(int? userId,string userName,string userPwd);

Vue部分

<script setup>
import {ref,reactive,onMounted} from 'vue';
import axios from 'axios';
import myHub from './httpTools/myHub'; //導入hub
const loginUser=reactive({
  userName:'王鶴棣',
  userPwd:'123456',
});
const loginBtn= ()=>{
  axios.post('http://localhost:5159/api/test/login',loginUser)
  .then(async res => {
    console.log(res);
    alert('成功');
    //這里在登錄成功之后調用服務端在MyHub類的CreateConnection方法,
    //把登錄成功之后返回的userId傳過去
    //使客戶端與服務端建立連接
    if(myHub.state.toString()!="Connected"){
        await myHub.start();
    }
    myHub.invoke("CreateConnection",res.data);
  })
}

//這里的ReceiveMessage用于接受服務器發(fā)送的消息
//這個ReceiveMessage名字是自己定義的
onMounted(() => {
  myHub.on('ReceiveMessage', (message) => {
    console.log("MyHub接受到的消息:"+message);
    alert(message);
  })
})
const message=ref();
const sendUserId=ref();
const sendMessage=()=>{
  myHub.invoke("SendMessageToUser",Number(sendUserId.value),message.value)
}
</script>

<template>
  <input type="text" v-model.trim="loginUser.userName" placeholder="用戶名">
  <input type="text" v-model.trim="loginUser.userPwd" placeholder="密碼">
  <button @click="loginBtn">確定</button>
  <input type="text" v-model="message">
  <select  v-model="sendUserId">
    <option value="1">王鶴棣</option>
    <option value="2">吳磊</option>
    <option value="3">趙露思</option>
  </select >
  <button @click="sendMessage">發(fā)送消息</button>
</template>

ASP.NET Core+Vue3 實現(xiàn)SignalR通訊文章來源地址http://www.zghlxwxcb.cn/news/detail-741811.html

到了這里,關于ASP.NET Core+Vue3 實現(xiàn)SignalR通訊的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 什么是 ASP.NET Core SignalR?

    所有連接了 Internet 的應用程序都由服務器和客戶端組成。 客戶端依賴于服務器獲取數(shù)據(jù),而它們獲取數(shù)據(jù)的主要機制是通過發(fā)出超文本傳輸協(xié)議 (HTTP) 請求來進行的。 某些客戶端應用程序需要經(jīng)常更改的數(shù)據(jù)。 ASP.NET Core SignalR 提供了一個 API,用于創(chuàng)建服務器到客戶端遠程過

    2024年02月15日
    瀏覽(92)
  • ASP.NET Core實時庫SignalR簡單應用

    ASP.NET Core實時庫SignalR簡單應用

    SignalR 是用于構建需要實時用戶交互或實時數(shù)據(jù)更新的Web 應用程序的一個開放源代碼.NET 庫。不僅僅用在Web應用中,后面會講到它的應用范圍。它簡化了簡化了構建實時應用程序的過程,包括 ASP.NET Server 庫和 JavaScript Client 庫,以便管理Client與Server連接并將內(nèi)容更新推送給Cl

    2024年02月11日
    瀏覽(23)
  • ASP.NET Core SignalR 系列(二)- 中心(服務端)

    ASP.NET Core SignalR 系列(二)- 中心(服務端)

    本章將和大家分享 ASP.NET Core SignalR 中的中心(服務端)。 本文大部分內(nèi)容摘自微軟官網(wǎng):https://learn.microsoft.com/zh-cn/aspnet/core/signalr/hubs?view=aspnetcore-7.0 廢話不多說,我們直接來看一個Demo,Demo的目錄結構如下所示: 本Demo的Web項目為ASP.NET Core Web 應用程序( 目標框架為.NET 7.0

    2024年02月13日
    瀏覽(95)
  • 【ASP.NET Core】使用SignalR推送服務器日志

    【ASP.NET Core】使用SignalR推送服務器日志

    一個多月前接手了一個產(chǎn)線機器人項目,上位機以讀寫寄存器的方式控制機器人,服務器就是用 ASP.NET Core 寫的 Web API。由于前一位開發(fā)者寫的代碼質量問題,導致上位機需要16秒才能啟動。經(jīng)過我近一個月的改造,除了保留業(yè)務邏輯代碼,其他的基本重寫。如今上位機的啟動

    2024年02月03日
    瀏覽(23)
  • ASP.NET Core SignalR 系列(四)- 中心篩選器

    本章將和大家分享 ASP.NET Core SignalR 中的中心篩選器。 本文大部分內(nèi)容摘自微軟官網(wǎng):https://learn.microsoft.com/zh-cn/aspnet/core/signalr/hub-filters?view=aspnetcore-7.0 廢話不多說,下面我們直接進入本章主題。 中心篩選器: 在 ASP.NET Core 5.0 或更高版本中可用。 允許在客戶端調用中心方法之

    2024年02月16日
    瀏覽(103)
  • ASP.NET Core SignalR 系列(三)- JavaScript 客戶端

    ASP.NET Core SignalR 系列(三)- JavaScript 客戶端

    本章將和大家分享 ASP.NET Core SignalR 中的 JavaScript 客戶端。ASP.NET Core SignalR JavaScript 客戶端庫使開發(fā)人員能夠調用服務器端SignalR中心代碼。 本文大部分內(nèi)容摘自微軟官網(wǎng):https://learn.microsoft.com/zh-cn/aspnet/core/signalr/javascript-client?view=aspnetcore-7.0tabs=visual-studio 廢話不多說,下面我們

    2024年02月15日
    瀏覽(99)
  • 微信小程序如何使用原生Websocket與Asp.Net Core SignalR 通信

    微信小程序如何使用原生Websocket與Asp.Net Core SignalR 通信

    如題,這可能算是.net 做小程序的服務端時,繞不開的一個問題,老生常談了。同樣的問題,我記得我2018/19年的一個項目的解決方案是: 修改官方的SignalR.js的客戶端 :把里面用到瀏覽器的Websocket改成微信小程序的官方api的。目前網(wǎng)上也有不少這樣的方案,已經(jīng)改好開源了;

    2024年02月08日
    瀏覽(129)
  • 在asp.net core中使用vue3+vite(起)

    在asp.net core中使用vue3+vite(起)

    一開始是一個自用的應用,原本是用razor寫的。最近有了點新想法,加點新功能,但是我接觸的項目基本都是vue+api的前后端分離,用這razor寫的是真不習慣,最后決定還是用習慣的vue重寫。 之前嘗試過在.net core里使用vue2+webpack,畢竟實際上就是把.vue翻譯成了.js來用,一個站點

    2024年02月12日
    瀏覽(34)
  • 微信小程序如何使用原生Websocket api與Asp.Net Core SignalR 通信

    微信小程序如何使用原生Websocket api與Asp.Net Core SignalR 通信

    如題,這可能算是.net 做小程序的服務端時,繞不開的一個問題,老生常談了。同樣的問題,我記得我2018/19年的一個項目的解決方案是: 修改官方的SignalR.js的客戶端 :把里面用到瀏覽器的Websocket改成微信小程序的官方api的。目前網(wǎng)上也有不少這樣的方案,已經(jīng)改好開源了;

    2024年02月09日
    瀏覽(39)
  • WPF+ASP.NET SignalR實現(xiàn)簡易在線聊天功能

    WPF+ASP.NET SignalR實現(xiàn)簡易在線聊天功能

    在實際業(yè)務中,當后臺數(shù)據(jù)發(fā)生變化,客戶端能夠實時的收到通知,而不是由用戶主動的進行頁面刷新才能查看,這將是一個非常人性化的設計。有沒有那么一種場景,后臺數(shù)據(jù)明明已經(jīng)發(fā)生變化了,前臺卻因為沒有及時刷新,而導致頁面顯示的數(shù)據(jù)與實際存在差異,從而造

    2024年02月07日
    瀏覽(19)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包