


Exemple de service push de messages multiterminaux SignalR Self Host (3)
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" ;.
Install-Package Microsoft.AspNet.SignalR.SelfHost
Install-Package Microsoft.Owin.Cors
using System; namespace Server { public class UserInfo { public string ConnectionId { get; set; } public string UserName { get; set; } public DateTime LastLoginTime { get; set; } } }
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(); } } }
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(); } } }
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(); } } } }
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!

Outils d'IA chauds

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

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

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

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 !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

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

Sujets chauds

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

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

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

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é.

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.

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.

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

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.
