Heim Backend-Entwicklung C#.Net-Tutorial Beispiel für den SignalR Self Host-Nachrichten-Push-Dienst mit mehreren Terminals (3)

Beispiel für den SignalR Self Host-Nachrichten-Push-Dienst mit mehreren Terminals (3)

Jul 02, 2017 pm 01:19 PM
host self signalr

In diesem Artikel werden hauptsächlich Multi-Terminal-Nachrichten-Push-Dienste wie SignalR Self Host+MVC vorgestellt. Interessierte Freunde können darauf verweisen

1. Übersicht

Aufgrund der Projektanforderungen gibt es kürzlich eine Modulfunktion im Projekt des Unternehmens, die verwendet werden muss, um eine sofortige Genehmigungsbenachrichtigung zu erhalten. Der ursprüngliche Entwurfsplan sah vor, den Server regelmäßig mit Ajax abzufragen Abfrage Als die Datenmenge und die Nutzung zu Beginn nicht groß waren, war es in Ordnung. Später, als die Nutzung zunahm und die Komplexität verschiedener Unternehmen im System zunahm, nahm auch der Druck auf den Server zu, also wollte ich Verwenden Sie Message Push, um die Ajax-Abfrage zu ersetzen. Wenn eine Genehmigung vorliegt, wird die Push-Methode aufgerufen, um die Nachricht an den nächsten Genehmiger zu senden und so den Druck auf den Server zu verringern.

Signal ist ein von Microsoft unterstütztes HTML-Websocket-Framework, das auf der .NET-Plattform läuft. Der Hauptzweck seines Erscheinens besteht darin, dem Server zu ermöglichen, Nachrichten aktiv an die Clientseite zu senden, sodass der Client die Anfrage nicht erneut senden oder Polling-Technologie verwenden muss, um die Nachricht zu erhalten. Und auch die Kompatibilität von SignalR ist sehr leistungsfähig, sodass ich hier nicht auf Details eingehen werde. Nachdem Sie sich nun für SignalR entschieden haben, können wir loslegen!

Meine Idee ist, SignalR zu einem selbstgehosteten Dienst zu machen und ihn von unserem B/S-Projekt zu trennen. Die Vorteile davon sind: 1. Der Push-Dienst ist nicht von iis abhängig, wir Der Push-Dienst kann weiterhin normal ausgeführt werden. 2. Wir können diesen Push-Dienst auf mehreren Plattformen aufrufen und mehrere Projekte gleichzeitig verwenden

2. Erstellen Sie den Server

Dies ist ohne weiteres das erste Mal, dass ich einen Blog schreibe. Nachdem wir die Geschäftsszenarien und -ideen vorgestellt haben, beginnen wir mit dem Codieren.

1. Verwenden Sie VS, um eine Lösung mit dem Namen „SignalRProject“ zu erstellen;

2. Erstellen Sie ein neues Steuerelement mit dem Namen „Server“ unter der SignalRProject-Lösung Taiwan

3. Geben Sie in der Paketmanagerkonsole den folgenden Befehl ein:


Install-Package Microsoft.AspNet.SignalR.SelfHost
Nach dem Login kopieren

4. Geben Sie den folgenden Befehl ein:


Install-Package Microsoft.Owin.Cors
Nach dem Login kopieren

5. Fügen Sie die UserInfo-Klasse wie folgt hinzu


using System; 
 
namespace Server 
{ 
 public class UserInfo 
 { 
  public string ConnectionId { get; set; } 
  public string UserName { get; set; } 
  public DateTime LastLoginTime { get; set; } 
 } 
}
Nach dem Login kopieren

6. Fügen Sie die ChatHub-Klasse in der Serverkonsole hinzu. Der Code lautet wie folgt


using Microsoft.AspNet.SignalR;
using Microsoft.AspNet.SignalR.Hubs;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace Server
{
 [HubName("IMHub")]
 public class ChatHub : Hub
 {
  // 静态属性
  public static List<UserInfo> OnlineUsers = new List<UserInfo>(); // 在线用户列表

  /// <summary>
  /// 登录连线
  /// </summary>
  /// <param name="userId">用户Id</param>
  /// <param name="userName">用户名</param>
  public void Register(string userName)
  {
   var connnectId = Context.ConnectionId;

   if (OnlineUsers.Count(x => x.ConnectionId == connnectId) == 0)
   {
    if (OnlineUsers.Any(x => x.UserName == userName))
    {
     var items = OnlineUsers.Where(x => x.UserName == userName).ToList();
     foreach (var item in items)
     {
      Clients.AllExcept(connnectId).onUserDisconnected(item.ConnectionId, item.UserName);
     }
     OnlineUsers.RemoveAll(x => x.UserName == userName);
    }

    //添加在线人员
    OnlineUsers.Add(new UserInfo
    {
     ConnectionId = connnectId,
     UserName = userName,
     LastLoginTime = DateTime.Now
    });
   }

   // 所有客户端同步在线用户
   Clients.All.onConnected(connnectId, userName, OnlineUsers);
  }

  /// <summary>
  /// 发送私聊
  /// </summary>
  /// <param name="toUserId">接收方用户连接ID</param>
  /// <param name="message">内容</param>
  public void SendPrivateMessage(string toUserName, string message)
  {
   var fromConnectionId = Context.ConnectionId;

   var toUser = OnlineUsers.FirstOrDefault(x => x.UserName == toUserName);
   var fromUser = OnlineUsers.FirstOrDefault(x => x.ConnectionId == fromConnectionId);

   if (toUser != null )
   {
    Clients.Client(toUser.ConnectionId).receivePrivateMessage(fromUser.UserName, message);
    Clients.Client(toUser.ConnectionId).receivePrivateMessage(message);
   }
   else
   {
    //表示对方不在线
    Clients.Caller.absentSubscriber();
   }
  }

  public void Send(string name, string message)
  {
   //Clients.All { get; } // 代表所有客户端
   //Clients.AllExcept(params string[] excludeConnectionIds); // 除了参数中的所有客户端
   //Clients.Client(string connectionId); // 特定的客户端,这个方法也就是我们实现端对端聊天的关键
   //Clients.Clients(IList<string> connectionIds); // 参数中的客户端
   //Clients.Group(string groupName, params string[] excludeConnectionIds); // 指定客户端组,这个也是实现群聊的关键所在
   //Clients.Groups(IList<string> groupNames, params string[] excludeConnectionIds);参数中的客户端组
   //Clients.User(string userId); // 特定的用户
   //Clients.Users(IList<string> userIds); // 参数中的用户

   Console.WriteLine("ConnectionId:{0}, InvokeMethod:{1}", Context.ConnectionId, "Send");
   Clients.All.addMessage(name, message);
  }

  /// <summary>
  /// 连线时调用
  /// </summary>
  /// <returns></returns>
  public override Task OnConnected()
  {
   Console.WriteLine("客户端连接,连接ID是:{0},当前在线人数为{1}", Context.ConnectionId, OnlineUsers.Count+1);
   return base.OnConnected();
  }


  /// <summary>
  /// 断线时调用
  /// </summary>
  /// <param name="stopCalled"></param>
  /// <returns></returns>
  public override Task OnDisconnected(bool stopCalled)
  {
   var user = OnlineUsers.FirstOrDefault(u => u.ConnectionId == Context.ConnectionId);

   // 判断用户是否存在,存在则删除
   if (user == null)
   {
    return base.OnDisconnected(stopCalled);
   }

   Clients.All.onUserDisconnected(user.ConnectionId, user.UserName); //调用客户端用户离线通知
   // 删除用户
   OnlineUsers.Remove(user);
   Console.WriteLine("客户端断线,连接ID是:{0},当前在线人数为{1}", Context.ConnectionId, OnlineUsers.Count);
   return base.OnDisconnected(stopCalled);
  }

  public override Task OnReconnected()
  {
   return base.OnReconnected();
  }
 }
}
Nach dem Login kopieren

7. Fügen Sie die Startup-Klasse in der Serverkonsole hinzu. Der Code lautet wie folgt:


using Microsoft.Owin.Cors;
using Owin;

namespace Server
{
 public class Startup
 {
  public void Configuration(IAppBuilder app)
  {
   //允许CORS跨域
   app.UseCors(CorsOptions.AllowAll);
   app.MapSignalR();
  }
 }
}
Nach dem Login kopieren

8. Ändern Sie die Serverkonsole, um die Programmklasse hinzuzufügen. Der Code lautet wie folgt:


using Microsoft.Owin.Hosting;
using System;

namespace Server
{
 class Program
 {
  static void Main(string[] args)
  {
   string url = "http://localhost:10086";//设定 SignalR Hub Server 对外的接口
   using (WebApp.Start(url))//启动 SignalR Hub Server
   {
    Console.WriteLine("Server running on {0}", url);
    Console.ReadLine();
   }
  }
 }
}
Nach dem Login kopieren

9. Führen Sie F5 aus

Dann greifen Sie auf http://localhost:10086/signalr/hubs zu

Das Ergebnis ist wie folgt:

Siehe das Bild oben. Es ist im Grunde fertig. Es ist schon spät, also werde ich die folgenden Artikel nachholen, wenn ich Zeit habe.

Das obige ist der detaillierte Inhalt vonBeispiel für den SignalR Self Host-Nachrichten-Push-Dienst mit mehreren Terminals (3). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Windows 11-Aufforderungen zum Herunterfahren des Task-Hosts. Der Fenster-Task-Host führt die Lösung für das Herunterfahren-Task aus Windows 11-Aufforderungen zum Herunterfahren des Task-Hosts. Der Fenster-Task-Host führt die Lösung für das Herunterfahren-Task aus Feb 12, 2024 pm 12:40 PM

In letzter Zeit haben viele Win11-Benutzer berichtet, dass sie beim Herunterfahren die Meldung erhalten, dass der Task-Host taskhostwindow die Aufgabe zum Herunterfahren ausführt. Was ist also los? Benutzer können den Desktop-Ordner im lokalen Registrierungseditor aufrufen und dann im rechten Fenster AutoEndTasks auswählen, um ihn festzulegen. Lassen Sie diese Website den Benutzern die Lösung für dieses Problem beim Herunterfahren sorgfältig vorstellen. Das Herunterfahren von Windows 11 zeigt an, dass der Task-Host „taskhostwindow“ die Shutdown-Aufgabe ausführt. Lösung: 1. Verwenden Sie die Tastenkombination Win-Taste + R-Taste, geben Sie „regedit“ ein und drücken Sie die Eingabetaste, wie in der Abbildung unten gezeigt. 2. Suchen Sie nach [HKEY

So überprüfen Sie, ob Aggregator host.exe in Windows 11 sicher ist So überprüfen Sie, ob Aggregator host.exe in Windows 11 sicher ist Apr 13, 2023 pm 04:22 PM

Wenn wir den Task-Manager starten, um eine Aufgabe zu beenden oder eine Anwendung zu stoppen, sehen wir normalerweise eine große Anzahl laufender Prozesse. Das ist völlig normal. Manchmal sehen wir jedoch Programme, die Systemressourcen verbrauchen, von denen wir überhaupt nichts wissen. Einer dieser Prozesse ist der Aggregator host.exe, der in letzter Zeit für einige Verwirrung unter den Benutzern sorgte. Bei einigen dieser Prozesse handelt es sich möglicherweise um legitime Windows-Anforderungen, bei anderen handelt es sich jedoch möglicherweise um Schadprogramme, die im Hintergrund ausgeführt werden und ohne Wissen oder Zustimmung des Benutzers Probleme verursachen. Nachdem wir die fünf Möglichkeiten kennengelernt haben, wie Sie den Task-Manager in Windows 11 starten können, zeigen wir Ihnen, wie Sie überprüfen, ob aggregator host.exe sicher oder ein Virus ist. weitermachen

Was ist der Unterschied zwischen Master und Host? Was ist der Unterschied zwischen Master und Host? Sep 28, 2023 pm 01:34 PM

Die Unterschiede zwischen Master und Host sind: 1. Der Host kann die Rolle eines Clients oder Servers spielen, während der Master der zentrale Server ist, der für die Koordination und Verwaltung anderer Slave-Server in einem verteilten System verantwortlich ist. 2. Der Host ist ein gewöhnliches Computergerät und der Master Normalerweise werden höhere Rechenleistung und Ressourcen verwendet, um Aufgaben zu verarbeiten und zu verteilen, Daten zu verwalten und die Stabilität des gesamten Systems aufrechtzuerhalten. 3. Der Host ist ein Knoten im Netzwerk, und der Master ist der Server, der eine zentrale Rolle spielt das verteilte System.

Was tun, wenn keine Route zum Host vorhanden ist? Was tun, wenn keine Route zum Host vorhanden ist? Oct 07, 2023 am 10:50 AM

Zu den Lösungen für „Keine Route zum Host“ gehören die Überprüfung der Netzwerkverbindung, die Überprüfung der IP-Adresse und des Ports, die Überprüfung der Firewall-Konfiguration, die Überprüfung der Routing-Konfiguration, die Überprüfung der Netzwerkgerätekonfiguration, die Überprüfung des Netzwerkdienststatus, die Überprüfung der Netzwerkkonfiguration und die Kontaktaufnahme der Netzwerkadministrator. Detaillierte Einführung: 1. Überprüfen Sie die Netzwerkverbindung, um sicherzustellen, dass die Netzwerkverbindung zwischen dem Client und dem Zielhost normal ist. Sie können versuchen, die Netzwerkkonnektivität über den Ping-Befehl oder andere Netzwerktools zu testen und zu überprüfen, ob Hardwaregeräte wie Netzwerkkabel vorhanden sind , drahtlose Netzwerke und Router funktionieren ordnungsgemäß. Stellen Sie sicher, dass die Netzwerkverbindung stabil ist usw.

Warum NameResolutionError(self.host, self, e) von e und wie man es löst Warum NameResolutionError(self.host, self, e) von e und wie man es löst Mar 01, 2024 pm 01:20 PM

Der Grund für den Fehler ist NameResolutionError(self.host,self,e)frome, ein Ausnahmetyp in der urllib3-Bibliothek. Der Grund für diesen Fehler ist, dass die DNS-Auflösung fehlgeschlagen ist, d. h. der Hostname oder die IP-Adresse Der Lösungsversuch konnte nicht gefunden werden. Dies kann daran liegen, dass die eingegebene URL-Adresse falsch ist oder der DNS-Server vorübergehend nicht verfügbar ist. So beheben Sie diesen Fehler Es gibt möglicherweise mehrere Möglichkeiten, diesen Fehler zu beheben: Überprüfen Sie, ob die eingegebene URL-Adresse korrekt ist und stellen Sie sicher, dass sie zugänglich ist. Stellen Sie sicher, dass der DNS-Server verfügbar ist. Sie können es mit dem Befehl „ping“ in der Befehlszeile versuchen Um zu testen, ob der DNS-Server verfügbar ist, versuchen Sie, über die IP-Adresse statt über den Hostnamen auf die Website zuzugreifen, wenn Sie sich hinter einem Proxy befinden

Wo ist die Hostdatei? Wo ist die Hostdatei? Jan 04, 2021 am 11:25 AM

Die Hostdatei befindet sich unter dem Pfad „C:\Windows\System32\drivers\etc“. Die Hostdatei ist eine reine Textdatei, die mit gewöhnlicher Textbearbeitungssoftware wie Notepad geöffnet werden kann um die Zuordnungsbeziehung der IP-Adresse zum Hostnamen zu enthalten.

4 schnelle Tipps zur Behebung der hohen CPU-Leistung des WMI-Provider-Hosts unter Windows 11 4 schnelle Tipps zur Behebung der hohen CPU-Leistung des WMI-Provider-Hosts unter Windows 11 Apr 18, 2023 pm 08:25 PM

Der WMIProviderHost-Prozess spielt in Windows 11 eine wichtige Rolle. Es ermöglicht anderen Anwendungen, Informationen über Ihren Computer anzufordern. Prozesse im Zusammenhang mit WMIProviderHost werden normalerweise im Hintergrund ausgeführt und verbrauchen daher normalerweise keine großen Mengen an Systemressourcen. Berichten zufolge verbraucht der Dienst jedoch aufgrund anderer Anwendungen zeitweise mehr als 50 % der CPU-Leistung. Es ist besorgniserregend, den Prozessor Ihres Computers über einen längeren Zeitraum nahezu mit maximaler Kapazität zu betreiben, da dies zu Überhitzung und Schäden an Systemkomponenten führen kann. Im heutigen Tutorial schauen wir uns an, warum WMIProviderHost in C unter Windows 11 funktioniert

So verwenden Sie self in Python So verwenden Sie self in Python May 17, 2023 pm 10:40 PM

Bevor wir die Verwendung von self in Python vorstellen, stellen wir zunächst die Klassen und Instanzen in Python vor. Wir wissen, dass Klassen und Instanzen abstrakte Vorlagen sein können vertreten durch eine Studentenklasse. Instanzen sind spezifische „Objekte“, die auf der Grundlage von Klassen erstellt werden. Jedes Objekt erbt dieselben Methoden von der Klasse, seine Daten können jedoch unterschiedlich sein. 1. Nehmen Sie die Klasse Student als Beispiel. In Python ist die Klasse wie folgt definiert: classStudent(object):pass(Object) gibt an, von welcher Klasse die Klasse erbt

See all articles