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

ASP.NET Core SignalR 入門

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

本章將和大家分享使用 SignalR 生成實時應(yīng)用的基礎(chǔ)知識。通過本文您將學(xué)習(xí)如何:使用ASP.NET Core SignalR + MVC + Vue 2.x + require 最終創(chuàng)建一個正常運行的簡易聊天應(yīng)用。

廢話不多說,我們直接來看一個Demo,Demo的目錄結(jié)構(gòu)如下所示:

ASP.NET Core SignalR 入門

本Demo的Web項目為ASP.NET Core Web 應(yīng)用程序(目標(biāo)框架為.NET 7.0) MVC項目。??

1、創(chuàng)建 SignalR 中心

中心是一個類,用作處理客戶端 - 服務(wù)器通信的高級管道。

可通過已連接客戶端調(diào)用 SendMessage,以向所有客戶端發(fā)送消息。

using Microsoft.AspNetCore.SignalR;

namespace SignalRChat.Hubs
{
    /// <summary>
    /// Hub 類管理連接、組和消息
    /// </summary>
    public class ChatHub : Hub
    {
        /// <summary>
        /// 可通過已連接客戶端調(diào)用 SendMessage,以向所有客戶端發(fā)送消息
        /// </summary>
        public async Task SendMessage(string user, string message)
        {
            //Clients.All 向所有的客戶端發(fā)送消息(服務(wù)端調(diào)用客戶端)
            //ReceiveMessage 是客戶端監(jiān)聽的方法
            await Clients.All.SendAsync("ReceiveMessage", user, message);

            /*
                // 常用方法
                // 給所有人發(fā)送消息
                await Clients.All.SendAsync("ReceiveMessage", data);

                // 給組里所有人發(fā)消息
                await Clients.Group("Users").SendAsync("ReceiveMessage", data);

                // 給調(diào)用方法的那個人發(fā)消息
                await Clients.Caller.SendAsync("ReceiveMessage", data);

                // 給除了調(diào)用方法的以外所有人發(fā)消息
                await Clients.Others.SendAsync("ReceiveMessage", data);

                // 給指定connectionId的人發(fā)消息
                await Clients.User(connectionId).SendAsync("ReceiveMessage", data);

                // 給指定connectionId的人發(fā)消息
                await Clients.Client(connectionId).SendAsync("ReceiveMessage", data);

                // 給指定connectionId的人發(fā)消息,同時指定多個connectionId
                await Clients.Clients(IReadOnlyList<> connectionIds).SendAsync("ReceiveMessage", data);
            */
        }
    }
}

2、配置 SignalR

必須將 SignalR 服務(wù)器配置為將 SignalR 請求傳遞給 SignalR。 將以下突出顯示(標(biāo)紅)的代碼添加到 Program.cs 文件。

using SignalRChat.Hubs;

namespace SignalRChat
{
    public class Program
    {
        public static void Main(string[] args)
        {
            var builder = WebApplication.CreateBuilder(args);

            //服務(wù)注冊(往容器中添加服務(wù))
            // Add services to the container.
            builder.Services.AddControllersWithViews();
            builder.Services.AddSignalR(); //SignalR

            var app = builder.Build();

            //配置Http請求處理管道
            // Configure the HTTP request pipeline.
            if (!app.Environment.IsDevelopment())
            {
                app.UseExceptionHandler("/Home/Error");
            }
            app.UseStaticFiles();

            app.UseRouting();

            app.UseAuthorization();

            //配置MVC路由
            app.MapControllerRoute(
                name: "areas",
                pattern: "{area:exists}/{controller=Home}/{action=Index}/{id?}");
            app.MapControllerRoute(
                name: "default",
                pattern: "{controller=Home}/{action=Index}/{id?}");
            app.MapHub<ChatHub>("/chatHub"); //SignalR

            app.Run();
        }
    }
}

以上突出顯示(標(biāo)紅)的代碼將 SignalR 添加到 ASP.NET Core 依賴關(guān)系注入和路由系統(tǒng)。

3、添加 SignalR 客戶端代碼

chat.js 文件,核心?JavaScript 代碼如下:

//第一個參數(shù):加載依賴模塊,可以是require_config中定義的短模塊名,也可以是完整的模塊路徑(去掉.js后綴名,根目錄為require_config中設(shè)置的baseUrl)
//第二個參數(shù):執(zhí)行加載完后的回調(diào)函數(shù)
require(['../common/base', 'jquery', 'signalr'], function (base, $, signalR) {
    let axios = base.axios;

    var vm = new base.vue({
        el: '#app', //掛載點
        mixins: [base.mixin], //混入,類似基類的概念
        data: {
            connectionSignalR: '', //SignalR連接
            user: '',
            message: '',
            msgList: []
        },
        //created鉤子函數(shù)
        created: function () {
            this.initSignalR(); //初始化SignalR
        },
        //mounted鉤子函數(shù)
        mounted: function () {
            //console.log('This is index mounted');
        },
        //方法
        methods: {
            //初始化SignalR
            initSignalR: function () {
                var _this = this;
                //創(chuàng)建連接
                _this.connectionSignalR = new signalR.HubConnectionBuilder()
                    .withUrl("/chatHub")
                    .configureLogging(signalR.LogLevel.Error)
                    .build();
                /*
                    日志等級:
                    signalR.LogLevel.Error:錯誤消息。 Error僅記錄消息。
                    signalR.LogLevel.Warning:有關(guān)潛在錯誤的警告消息。 日志 Warning 和 Error 消息。
                    signalR.LogLevel.Information:無錯誤的狀態(tài)消息。 日志 Information 、 Warning 和 Error 消息。
                    signalR.LogLevel.Trace:跟蹤消息。 記錄所有內(nèi)容,包括中心和客戶端之間傳輸?shù)臄?shù)據(jù)。
                */

                //監(jiān)聽中心(服務(wù)端)發(fā)送的消息(服務(wù)端調(diào)用客戶端)
                //ReceiveMessage 是服務(wù)端調(diào)用客戶端的方法名
                _this.connectionSignalR.on("ReceiveMessage", function (user, message) {
                    _this.msgList.push({
                        user: user,
                        message: message
                    });
                });

                //啟動連接
                _this.connectionSignalR.start().then(function () {
                    //啟動連接后需要立即執(zhí)行的邏輯
                    //document.getElementById("sendButton").disabled = false;
                }).catch(function (err) {
                    return console.error(err.toString());
                });
            },
            //發(fā)送消息
            sendMsg: function () {
                var _this = this;

                if (_this.message) {
                    //向中心(服務(wù)端)發(fā)送消息(客戶端調(diào)用服務(wù)端)
                    //SendMessage 是服務(wù)端定義的的方法
                    _this.connectionSignalR.invoke("SendMessage", _this.user, _this.message).catch(function (err) {
                        return console.error(err.toString());
                    });
                    _this.message = ''; //發(fā)送完清空消息
                }
            },
        }
    });
});

公共腳本文件代碼如下:

其中 require_config.js 文件代碼如下:

//主要用來配置模塊的加載位置(設(shè)置短模塊名)
require.config({
    baseUrl: '/js/lib', //設(shè)置根目錄
    paths: { //如果沒有設(shè)置根目錄則需要填寫完整路徑
        'vue': 'vue',
        'axios': 'axios',
        'jquery': 'jquery-3.6.3',
        'signalr': 'signalr',
        //paths還有一個重要的功能,就是可以配置多個路徑,如果遠程cdn庫沒有加載成功,可以加載本地的庫,如下:
        //'jquery': ['http://libs.baidu.com/jquery/2.0.3/jquery', '/js/lib/jquery-3.6.3'],
    }
});

其中 base.js 文件代碼如下:

//define用來自定義模塊
//第一個參數(shù):加載依賴模塊,可以是require_config中定義的短模塊名,也可以是完整的模塊路徑(去掉.js后綴名)
//第二個參數(shù):執(zhí)行加載完后的回調(diào)函數(shù)
define(['vue', 'axios', '../components/buttonCounter'], function (vue, axios, buttonCounter) {
    //TODO 此處可以處理一些公共的邏輯
    //vue.component('component-a', { /* ... */ }); //全局注冊組件
    //vue.mixin({...}); //全局混入

    /*
        定義組件名的方式有兩種:
        1、使用 kebab-case (短橫線分隔命名)
            當(dāng)使用 kebab-case (短橫線分隔命名) 定義一個組件時,你也必須在引用這個自定義元素時使用 kebab-case,例如 <my-component-name>
        
        2、使用 PascalCase (首字母大寫命名) 
            當(dāng)使用 PascalCase (首字母大寫命名) 定義一個組件時,你在引用這個自定義元素時兩種命名法都可以使用。
            也就是說 <my-component-name> 和 <MyComponentName> 都是可接受的。
            注意,盡管如此,直接在 DOM (即非字符串的模板) 中使用時只有 kebab-case 是有效的。    
    */

    //Vue.component(...) 的第一個參數(shù)為組件名。      
    vue.component('button-counter', buttonCounter); //全局注冊

    return {
        vue: vue,
        axios: axios,

        //Vue混入
        mixin: {
            //數(shù)據(jù)
            data: function () {
                return {
                    domain: '', //域名
                }
            },
            //組件
            components: {

            },
            //created鉤子函數(shù)
            created: function () {
                //console.log('This is base created');
                var _this = this;
                _this.getDomain();
            },
            //mounted鉤子函數(shù)
            mounted: function () {
                console.log('This is base mounted');
            },
            //方法
            methods: {
                //測試
                doTest: function () {
                    console.log('This is base doTest');
                },
                //獲取域名
                getDomain: function () {
                    var _this = this;
                    _this.domain = 'http://localhost:5296';
                },
            }
        },
    };
});

控制器和視圖文件代碼如下:

其中?HomeController 控制器代碼如下:

using Microsoft.AspNetCore.Mvc;
using SignalRChat.Models;
using System.Diagnostics;

namespace SignalRChat.Controllers
{
    public class HomeController : Controller
    {
        private readonly ILogger<HomeController> _logger;

        public HomeController(ILogger<HomeController> logger)
        {
            _logger = logger;
        }

        public IActionResult Index()
        {
            return View();
        }
    }
}

其中布局頁?_Layout.cshtml 視圖文件代碼如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>@ViewData["Title"] - SignalRChat</title>

    <script src="/js/lib/require.js"></script>
    <script src="/js/common/require_config.js"></script>
    @await RenderSectionAsync("header", required: false)
</head>
<body>
    <div class="container">
        @RenderBody()
    </div>
    @await RenderSectionAsync("footer", required: false)
</body>
</html>

其中?Index.cshtml 視圖文件代碼如下:

@{
    ViewData["Title"] = "Home Page";
}

<div id="app">
    <template>
        <p>
            User:<input v-model="user" type="text" />
        </p>
        <p>
            Message: <input v-model="message" type="text" />
        </p>
        <p>
            <button v-on:click="sendMsg">發(fā)送</button>
        </p>
        <hr />
        <ul>
            <li v-for="(item, index) in msgList" :key="index">
                {{ item.user }} says {{ item.message }}
            </li>
        </ul>
    </template>
</div>

@section footer{
    <script src="/js/pageScript/chat.js"></script>
}

4、運行應(yīng)用

此處我使用的是?.NET Core CLI ?命令行的方式來運行應(yīng)用,如下所示:

ASP.NET Core SignalR 入門

打開兩個瀏覽器實例,分別訪問:http://localhost:5296/ ,?運行結(jié)果如下:

ASP.NET Core SignalR 入門

選擇任一瀏覽器,輸入名稱和消息,然后點擊“發(fā)送”按鈕:

ASP.NET Core SignalR 入門

可以發(fā)現(xiàn),兩個頁面上會立即顯示名稱和消息。?

更多關(guān)于?ASP.NET Core SignalR?的相關(guān)知識可參考微軟官方文檔:https://learn.microsoft.com/zh-cn/aspnet/core/tutorials/signalr?view=aspnetcore-7.0&tabs=visual-studio

至此本文就全部介紹完了,如果覺得對您有所啟發(fā)請記得點個贊哦!?。?/p>

?

Demo源碼:

鏈接:https://pan.baidu.com/s/13ppUjr0h2dse5vnw5uiZ9Q 
提取碼:qm2a

此文由博主精心撰寫轉(zhuǎn)載請保留此原文鏈接:https://www.cnblogs.com/xyh9039/p/17520659.html

版權(quán)聲明:如有雷同純屬巧合,如有侵權(quán)請及時聯(lián)系本人修改,謝謝!??!文章來源地址http://www.zghlxwxcb.cn/news/detail-514744.html

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

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

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • ASP.NET Core實時庫SignalR簡單應(yīng)用

    ASP.NET Core實時庫SignalR簡單應(yīng)用

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

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

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

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

    2024年02月13日
    瀏覽(95)
  • 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 或更高版本中可用。 允許在客戶端調(diào)用中心方法之

    2024年02月16日
    瀏覽(101)
  • 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中標(biāo)識的客戶端連接的唯一標(biāo)識符, 將userId和

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

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

    本章將和大家分享 ASP.NET Core SignalR 中的 JavaScript 客戶端。ASP.NET Core SignalR JavaScript 客戶端庫使開發(fā)人員能夠調(diào)用服務(wù)器端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)
  • 服務(wù)端使用ASP.NET Core SignalR與Vue3(TypeScript與JavaScript)前端建立通信(以進度條為例)

    服務(wù)端使用ASP.NET Core SignalR與Vue3(TypeScript與JavaScript)前端建立通信(以進度條為例)

    1. ASP.NET Core ? ? ? ? ? ASP.NET Core 是一個跨平臺、高性能及開源的框架,用于生成基于云且連接互聯(lián)網(wǎng)的新式應(yīng)用程式。 官方文檔:ASP.NET documentation | Microsoft Learn ?2.? ASP.NET Core SignalR ? ? ? ? ASP.NET Core SignalR 是開源庫,用于服務(wù)端與客戶端建立實時通信,可以自動管理連接

    2024年02月06日
    瀏覽(22)
  • 【一文詳解】知識分享:(ASP.Net Core基礎(chǔ)學(xué)習(xí)及快速入門)

    【一文詳解】知識分享:(ASP.Net Core基礎(chǔ)學(xué)習(xí)及快速入門)

    .Net .NET是微軟的一個開發(fā)平臺,這個平臺的一大特點就是跨語言性,不管是什么語言,c、c++、c#、F#、J#、vb等語言都可以用這個平臺合作開發(fā); .NET,它是微軟創(chuàng)建的一個用于構(gòu)建多種不同類型的應(yīng)用程序的開發(fā)人員平臺。 .NET 是一個廣泛的術(shù)語,用于描述整個 Microsoft 的軟件

    2024年02月01日
    瀏覽(154)
  • Web SSH 的原理與在 ASP.NET Core SignalR 中的實現(xiàn)

    Web SSH 的原理與在 ASP.NET Core SignalR 中的實現(xiàn)

    有個項目,需要在前端有個管理終端可以 SSH 到主控機的終端,如果不考慮用戶使用 vim 等需要在控制臺內(nèi)現(xiàn)實界面的軟件的話,其實使用 Process 類型去啟動相應(yīng)程序就夠了。而這次的需求則需要考慮用戶會做相關(guān)設(shè)置。 這里用到的原理是偽終端。偽終端(pseudo terminal)是現(xiàn)

    2024年02月07日
    瀏覽(20)
  • 十三、Net Core6 SignalR入門(一)

    十三、Net Core6 SignalR入門(一)

    使用 ASP.NET Core SignalR 中的中心 | Microsoft Docs 了解如何使用 ASP.NET Core SignalR 中的中心。 https://docs.microsoft.com/zh-cn/aspnet/core/signalr/hubs?view=aspnetcore-6.0 ASP.NET Core SignalR JavaScript 客戶端 | Microsoft Docs ASP.NET Core SignalR JavaScript 客戶端概述。 https://docs.microsoft.com/zh-cn/aspnet/core/signalr/javas

    2024年02月06日
    瀏覽(25)
  • ASP.NET Core Web API入門之三:使用EF Core

    ASP.NET Core Web API入門之三:使用EF Core

    一般來講我們做項目都會用實體類跟數(shù)據(jù)庫實體進行關(guān)系對應(yīng),這樣的好處方便我們維護、增刪改查,并且可以減少SQL的編寫,從而統(tǒng)一風(fēng)格,那么 Entity Framework Core 就是很不錯的ORM框架。 1、跨數(shù)據(jù)庫支持能力強大,只需修改配置就可以輕松實現(xiàn)數(shù)據(jù)庫切換。 2、提升了開發(fā)效

    2024年02月10日
    瀏覽(22)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包