Maison développement back-end Tutoriel C#.Net Exemple de service push de messages multiterminaux SignalR Self Host (3)

Exemple de service push de messages multiterminaux SignalR Self Host (3)

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

Cet article présente principalement en détail les services de transmission de messages multiterminaux tels que SignalR Self Host+MVC. Il a une certaine valeur de référence. Les amis intéressés peuvent s'y référer

1. Présentation .

En raison des besoins du projet, il existe récemment une fonction de module dans le projet de l'entreprise, qui doit être utilisée pour obtenir une notification d'approbation immédiate ; le plan de conception original était d'utiliser ajax pour interroger régulièrement le serveur requête. , c'était bien quand la quantité de données et l'utilisation n'étaient pas importantes au début. Plus tard, à mesure que l'utilisation augmentait et que la complexité des diverses activités du système augmentait, la pression sur le serveur augmentait également, alors je voulais. utilisez le message push pour le remplacer. Requête d'interrogation Ajax, lorsqu'il y a une soumission d'approbation, la méthode push est appelée pour transmettre le message à l'approbateur suivant, réduisant ainsi la pression sur le serveur.

Signal est un framework websocket HTML pris en charge par Microsoft qui s'exécute sur la plateforme .NET. L'objectif principal de son apparition est de permettre au serveur de pousser activement les messages vers la page client, afin que le client n'ait pas à renvoyer la demande ou à utiliser la technologie d'interrogation pour obtenir le message. Et la compatibilité de SignalR est également très puissante, je n’entrerai donc pas dans les détails ici. Maintenant que vous avez choisi SignalR, commençons !

Mon idée est de faire de SignalR un service auto-hébergé et de le séparer de notre projet b/s. Les avantages de ceci sont : 1. Le service push ne dépend pas d'iis. Même s'il échoue, nous. Le service push peut toujours fonctionner normalement ; 2. Nous pouvons appeler ce service push sur plusieurs plateformes, et plusieurs projets peuvent être utilisés en même temps

2. Créez le serveur

Sans plus tarder, c'est la première fois que j'écris un blog. Après avoir présenté les scénarios et les idées commerciales, commençons à coder.

1. Utilisez VS pour créer une solution nommée "SignalRProject" ;

2 Créez un nouveau contrôle nommé Server sous la solution SignalRProject Taiwan

.

3. Dans la console du gestionnaire de packages, saisissez la commande suivante


Install-Package Microsoft.AspNet.SignalR.SelfHost
Copier après la connexion

4. Entrez la commande suivante :


Install-Package Microsoft.Owin.Cors
Copier après la connexion

5. Ajoutez la classe UserInfo dans la console du serveur, codez comme suit <. 🎜>


using System; 
 
namespace Server 
{ 
 public class UserInfo 
 { 
  public string ConnectionId { get; set; } 
  public string UserName { get; set; } 
  public DateTime LastLoginTime { get; set; } 
 } 
}
Copier après la connexion

6. Ajoutez la classe ChatHub dans la console Serveur, le code est le suivant


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();
  }
 }
}
Copier après la connexion

7. Ajoutez la classe Startup dans la console Serveur, le code est le suivant


using Microsoft.Owin.Cors;
using Owin;

namespace Server
{
 public class Startup
 {
  public void Configuration(IAppBuilder app)
  {
   //允许CORS跨域
   app.UseCors(CorsOptions.AllowAll);
   app.MapSignalR();
  }
 }
}
Copier après la connexion

8. Modifiez la console du serveur pour ajouter la classe Program, le code est le suivant


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();
   }
  }
 }
}
Copier après la connexion

9. Exécutez F5

Puis accédez à http://localhost:10086/signalr/hubs

Le résultat est le suivant :

Voir la photo ci-dessus C'est pratiquement terminé. J'en parlerai aujourd'hui, donc je vais d'abord me reposer et rattraper les articles suivants quand j'aurai le temps.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

L'arrêt de Windows 11 invite l'hôte de la tâche dans la fenêtre de la tâche à exécuter la solution de tâche d'arrêt L'arrêt de Windows 11 invite l'hôte de la tâche dans la fenêtre de la tâche à exécuter la solution de tâche d'arrêt Feb 12, 2024 pm 12:40 PM

Récemment, de nombreux utilisateurs de Win11 ont signalé que lors de l'arrêt, ils sont invités à indiquer que l'hôte de la tâche taskhostwindow exécute la tâche d'arrêt. Alors, que se passe-t-il ? Les utilisateurs peuvent accéder au dossier Bureau sous l'éditeur de registre local, puis sélectionner AutoEndTasks dans la fenêtre de droite pour le définir. Laissez ce site présenter soigneusement aux utilisateurs la solution à ce problème lors de la fermeture. L'arrêt de Windows 11 indique que l'hôte de la tâche taskhostwindow exécute la tâche d'arrêt. Solution 1. Utilisez la combinaison de touches win key + r key, entrez « regedit » et appuyez sur Entrée, comme indiqué dans la figure ci-dessous. 2. Recherchez [HKEY

Comment vérifier si l'agrégateur host.exe est sûr dans Windows 11 Comment vérifier si l'agrégateur host.exe est sûr dans Windows 11 Apr 13, 2023 pm 04:22 PM

Lorsque nous lançons le Gestionnaire des tâches pour terminer une tâche ou arrêter une application, nous trouvons généralement un grand nombre de processus en cours d'exécution. C'est tout à fait normal. Cependant, nous voyons parfois des programmes qui utilisent des ressources système dont nous ignorons complètement l’existence. L'un de ces processus est l'agrégateur host.exe, qui a récemment semé une certaine confusion parmi les utilisateurs. Certains de ces processus peuvent être des exigences légitimes de Windows, mais d'autres peuvent être des programmes malveillants s'exécutant en arrière-plan et causant des problèmes à l'insu ou sans le consentement de l'utilisateur. Après avoir vu les cinq façons de lancer le Gestionnaire des tâches dans Windows 11, nous vous montrerons comment vérifier si l'agrégateur host.exe est sûr ou s'il s'agit d'un virus. continuez

Pourquoi NameResolutionError(self.host, self, e) de e et comment le résoudre Pourquoi NameResolutionError(self.host, self, e) de e et comment le résoudre Mar 01, 2024 pm 01:20 PM

La raison de l'erreur est NameResolutionError(self.host,self,e)frome, qui est un type d'exception dans la bibliothèque urllib3. La raison de cette erreur est que la résolution DNS a échoué, c'est-à-dire le nom d'hôte ou l'adresse IP qui était. La tentative de résolution n'a pas pu être trouvée. Cela peut être dû au fait que l'adresse URL saisie est incorrecte ou que le serveur DNS est temporairement indisponible. Comment résoudre cette erreur Il peut y avoir plusieurs façons de résoudre cette erreur : Vérifiez si l'adresse URL saisie est correcte et assurez-vous qu'elle est accessible Assurez-vous que le serveur DNS est disponible, vous pouvez essayer d'utiliser la commande "ping" dans la ligne de commande pour tester si le serveur DNS est disponible Essayez d'accéder au site Web en utilisant l'adresse IP au lieu du nom d'hôte si vous êtes derrière un proxy

Quelle est la différence entre maître et hôte Quelle est la différence entre maître et hôte Sep 28, 2023 pm 01:34 PM

Les différences entre le maître et l'hôte sont les suivantes : 1. L'hôte peut jouer le rôle de client ou de serveur, tandis que le maître est le serveur central chargé de coordonner et de gérer les autres serveurs esclaves dans un système distribué. 2. L'hôte est un périphérique informatique ordinaire et le maître ; a généralement une puissance de traitement plus élevée et les ressources sont utilisées pour traiter et distribuer les tâches, gérer les données et maintenir la stabilité de l'ensemble du système 3. L'hôte est un nœud du réseau et le maître est le serveur qui joue un rôle central dans le système distribué.

Que faire s'il n'y a pas de route vers l'hôte Que faire s'il n'y a pas de route vers l'hôte Oct 07, 2023 am 10:50 AM

Les solutions « pas de route vers l'hôte » incluent la vérification de la connexion réseau, la vérification de l'adresse IP et du port, la vérification de la configuration du pare-feu, la vérification de la configuration du routage, la vérification de la configuration du périphérique réseau, la vérification de l'état du service réseau, la vérification de la configuration réseau et la prise de contact. l'administrateur du réseau. Introduction détaillée : 1. Vérifiez la connexion réseau pour vous assurer que la connexion réseau entre le client et l'hôte cible est normale. Vous pouvez essayer de tester la connectivité réseau via la commande ping ou d'autres outils réseau, et vérifier si les périphériques matériels tels que les câbles réseau. , les réseaux sans fil et les routeurs fonctionnent correctement. Assurez-vous que la connexion réseau est stable, etc.

Où est le fichier hôte Où est le fichier hôte Jan 04, 2021 am 11:25 AM

Le fichier hôte se trouve sous le chemin « C:\Windows\System32\drivers\etc » ; le fichier hôte est un fichier texte brut qui peut être ouvert avec un logiciel d'édition de texte ordinaire, tel que le Bloc-notes. pour contenir la relation de mappage d'adresse IP avec le nom d'hôte.

4 conseils rapides pour corriger le processeur élevé de l'hôte du fournisseur WMI sous Windows 11 4 conseils rapides pour corriger le processeur élevé de l'hôte du fournisseur WMI sous Windows 11 Apr 18, 2023 pm 08:25 PM

Le processus WMIProviderHost joue un rôle essentiel dans Windows 11. Il permet à d'autres applications de demander des informations sur votre ordinateur. Les processus liés à WMIProviderHost s’exécutent généralement en arrière-plan ; ils ne consomment donc généralement pas de grandes quantités de ressources système. Cependant, il a été signalé que le service utilise parfois plus de 50 % de la puissance du processeur à cause d'autres applications. Il est inquiétant de faire fonctionner le processeur de votre ordinateur à sa capacité presque maximale pendant une période prolongée, car cela peut entraîner une surchauffe et endommager les composants du système. Dans le didacticiel d'aujourd'hui, nous verrons pourquoi WMIProviderHost fonctionne en C sous Windows 11

Comment s'utiliser soi-même en Python Comment s'utiliser soi-même en Python May 17, 2023 pm 10:40 PM

Avant d'introduire l'utilisation de self en Python, introduisons d'abord les classes et les instances en Python. Nous savons que les concepts les plus importants de l'orientation objet sont les classes et les instances. Les classes sont des modèles abstraits, comme les étudiants. représenté par une classe d’étudiants. Les instances sont des « objets » spécifiques créés à partir de classes. Chaque objet hérite des mêmes méthodes de la classe, mais ses données peuvent être différentes. 1. Prenons l'exemple de la classe Student. En Python, la classe est définie comme suit : classStudent(object):pass(Object) indique de quelle classe la classe hérite.

See all articles