ASP.NET Core SingleR: Erste Erfahrungen und einfacher Projektaufbau

Vorwort

Die normale Webkommunikation basiert auf HTTP-Anfragen. Die Besonderheit besteht darin, dass sie nach jeder Anfrage geschlossen wird und die Verzögerung relativ groß ist. Wenn Sie Webspiele, Webchat und andere Funktionen nutzen möchten, müssen Sie Instant Messaging verwenden. SignalR ist eine Möglichkeit der sofortigen Kommunikation.

Microsoft Official | ASP.NET Core SignalR-Übersicht

Fügen Sie hier eine Bildbeschreibung ein

Fügen Sie hier eine Bildbeschreibung ein

Fügen Sie hier eine Bildbeschreibung ein

Anwendungsszenarien

Unsere allgemeinen Netzwerkanforderungen bestehen darin, die Daten an die Datenbank weiterzuleiten und dann die Webseitenanforderung zum Lesen der Daten zu verwenden.

硬件设备
上位机采集程序
数据库
后端
Http网络请求
网页

Für niedrige Latenz- und Echtzeitanforderungen wird dieser Logik jedoch nicht gefolgt. Aufgrund der Echtzeitnatur bedeutet dies, dass die vorherigen Daten nicht wichtig sind und verworfen werden können. Genau wie bei einer Live-Übertragung sieht sich niemand das Video in der ersten Minute an, es sei denn, es wird künstlich aufgezeichnet, und es kann direkt verworfen werden.

硬件设备
上位机采集程序
'直播'数据流
网页

Live-Übertragung bedeutet hier Echtzeitdaten, keine Videostreams wie Douyu Live.

Wie sieht die SignalR-Website aus?

Blazor wird mit SignalR entwickelt

ASP.NET Core Blazor-Hostingmodell

Fügen Sie hier eine Bildbeschreibung ein
Lassen Sie uns eine Blazor-URL finden und einen Blick darauf werfen.

Blazor-UI-Komponentenbibliothek im Bootstrap-Stil

Fügen Sie hier eine Bildbeschreibung ein

Das erste ASP.NET-KernsignalR-Programm

Bestimmen Sie die SignalR-Version

Microsoft verfügt offiziell über zwei SignalRs, eines basierend auf .net Framework und eines basierend auf .NET Core. Laut Microsoft sollte empfohlen werden, die Kernversion von SignalR zu verwenden

Fügen Sie hier eine Bildbeschreibung ein

Ich habe viele Tutorials im Internet gefunden, aber entweder ist die Version zu alt oder die Antworten sind falsch. Es ist besser, dem Tutorial von Microsoft zu folgen und einen Blick darauf zu werfen. Übrigens habe ich lange gesucht und das neueste .net Core 8.0-Tutorial von Microsoft gefunden.

Offizielle Microsoft-Dokumentation | Tutorial: Erste Schritte mit ASP.NET Core SignalR

Fügen Sie hier eine Bildbeschreibung ein

Erstellen Sie ein neues MVC-Projekt

Öffnen Sie nach Microsofts Absicht ein ASP.NET Core Web anstelle eines Blazor-Programms

Fügen Sie hier eine Bildbeschreibung ein
Fügen Sie hier eine Bildbeschreibung ein

Unpkg-Manager hinzufügen

Fügen Sie hier eine Bildbeschreibung ein

Nachdem ich lange online gesucht hatte, stellte ich fest, dass ich LibMan installieren muss.

Verwenden der LibMan-CLI mit ASP.NET Core

dotnet tool install -g Microsoft.Web.LibraryManager.Cli

Hierzu ist eine Verbindung zum externen Netzwerk erforderlich, und im internen Netzwerk wird möglicherweise ein Fehler gemeldet.
Fügen Sie hier eine Bildbeschreibung ein

Erfolgreiche Installation
Fügen Sie hier eine Bildbeschreibung ein

Führen Sie es aus, um die Version zu überprüfen und festzustellen, ob die Installation erfolgreich ist.

libman --version

Fügen Sie hier eine Bildbeschreibung ein

Kunde hinzufügen

Fügen Sie hier eine Bildbeschreibung ein

Fügen Sie hier eine Bildbeschreibung ein
Fügen Sie hier eine Bildbeschreibung ein

Fügen Sie hier eine Bildbeschreibung ein

ChatHub-Dateien hinzufügen

Fügen Sie hier eine Bildbeschreibung ein

using Microsoft.AspNetCore.SignalR;

namespace SiganlRTest.Hubs
{
    
    
    public class ChatHub : Hub
    {
    
    
        public async Task SendMessage(string user, string message)
        {
    
    
            await Clients.All.SendAsync("ReceiveMessage", user, message);
        }
    }
}


SignalR-Dienst hinzufügen

Fügen Sie hier eine Bildbeschreibung ein

Webseite hinzufügen

@page
<div class="container">
    <div class="row p-1">
        <div class="col-1">User</div>
        <div class="col-5"><input type="text" id="userInput" /></div>
    </div>
    <div class="row p-1">
        <div class="col-1">Message</div>
        <div class="col-5"><input type="text" class="w-100" id="messageInput" /></div>
    </div>
    <div class="row p-1">
        <div class="col-6 text-end">
            <input type="button" id="sendButton" value="Send Message" />
        </div>
    </div>
    <div class="row p-1">
        <div class="col-6">
            <hr />
        </div>
    </div>
    <div class="row p-1">
        <div class="col-6">
            <ul id="messagesList"></ul>
        </div>
    </div>
</div>
<script src="~/js/signalr/dist/browser/signalr.js"></script>
<script src="~/js/chat.js"></script>

Fügen Sie hier eine Bildbeschreibung ein
Fügen Sie hier eine Bildbeschreibung ein
Kopieren Sie den Microsoft-Code hinein

"use strict";

var connection = new signalR.HubConnectionBuilder().withUrl("/chatHub").build();

//Disable the send button until connection is established.
document.getElementById("sendButton").disabled = true;

connection.on("ReceiveMessage", function (user, message) {
    
    
    var li = document.createElement("li");
    document.getElementById("messagesList").appendChild(li);
    // We can assign user-supplied strings to an element's textContent because it
    // is not interpreted as markup. If you're assigning in any other way, you 
    // should be aware of possible script injection concerns.
    li.textContent = `${
      
      user} says ${
      
      message}`;
});

connection.start().then(function () {
    
    
    document.getElementById("sendButton").disabled = false;
}).catch(function (err) {
    
    
    return console.error(err.toString());
});

document.getElementById("sendButton").addEventListener("click", function (event) {
    
    
    var user = document.getElementById("userInput").value;
    var message = document.getElementById("messageInput").value;
    connection.invoke("SendMessage", user, message).catch(function (err) {
    
    
        return console.error(err.toString());
    });
    event.preventDefault();
});

Führen Sie Tests durch

Fügen Sie hier eine Bildbeschreibung ein

Debuggen des Browser-Websockets

Fügen Sie hier eine Bildbeschreibung ein
Fügen Sie hier eine Bildbeschreibung ein
Gesendete Nachricht
Fügen Sie hier eine Bildbeschreibung ein
Empfangene Nachricht
Fügen Sie hier eine Bildbeschreibung ein
Wir sehen, dass die Nachricht viele Informationen enthält. Was bedeutet das also? Hier müssen Sie sich das offizielle Github-Repository von SignalR ansehen.

SignalR Hub-Protokoll

Typ=1

Fügen Sie hier eine Bildbeschreibung ein

Übersetzen Sie es einfach

  • Typ: Wenn es 1 ist, wird es für die Nachrichteninteraktion verwendet. Es kann nicht nur dazu dienen, die Stabilität des Netzwerks sicherzustellen
  • invocationId: optional, ID zur Unterscheidung von Nachrichten
  • Ziel: Triggerzeichenfolge, ähnlich dem Token in MQTT
  • Argumente: Nachrichtenlast, ähnlich wie Payload in MQTT
  • streamIds: optionale, eindeutige ID der Kommunikation

Typ=6

Wenn der Typ 6 ist, wird er zum Pingen der Netzwerksituation verwendet.

Fügen Sie hier eine Bildbeschreibung ein

Wenn Typ „Andere“ ist

Typ hat insgesamt 1-9, 9 Methoden, ich werde sie hier nicht erklären.

Zusammenfassen

Als nächstes werde ich die clientseitige und serverseitige Entwicklung von ASP.NET Core untersuchen. Da es online nicht viele Informationen gibt, kann ich nur selbst recherchieren.

Ich denke du magst

Origin blog.csdn.net/qq_44695769/article/details/135615601
Empfohlen
Rangfolge