SignalR pour le suivi des utilisateurs en ligne et le chat

Nous travaillons sur une application de réseau social et nous implémentons plusieurs nouvelles fonctionnalités. 1. Suivi des utilisateurs en ligne 2. Chat (chat individuel et discussion ultérieure)

J'ai regardé SingalR et cela semble prometteur. Nous utilisons ASP.NET MVC 3 et pensons à utiliser des hubs. Ma question est de savoir si SignalR est-il meilleur au lieu d'un sondage simple pour le chat? Quel sera le meilleur en ce qui concerne l'évolutivité? J'ai vu d'autres questions sur SO, mais je n'ai pas été en mesure de savoir lequel d'entre eux est meilleur en ce qui concerne l'évolutivité.

La deuxième question est si nous utilisons SignalR, pouvons-nous l'utiliser pour suivre également les utilisateurs en ligne. Nous pouvons appeler une fonction côté serveur de chaque client à intervalles réguliers pour dire "Je suis en ligne" et, dans la méthode Hub, nous pouvons simplement définir le bit isOnline dans le DB. Une fois que le client est déconnecté, nous pouvons désactiver le bit. Est-ce que cela fonctionne ou est-ce que les sondages simples sont mieux ici? Comment définissons-nous l'utilisateur hors ligne si nous utilisons des sondages simples?

Merci

J'utilise SignalR comme une sorte d'architecture de discussion aussi. Fonctionne parfaitement avec notre configuration de serveur IIS unique. Pour vérifier l'évolutivité: Sclaing-out-SignalR

Si vous utilisez Hubs, vous pouvez résoudre le problème «Je suis en ligne» en interrogeant les clients connectés comme celui-ci

var clients = Hub.GetClients<Type of your hub here>(); 

Et demandez l'ID utilisateur de chaque client. S'il y a une perte de connexion, vous devez trouver les utilisateurs en ligne de DB, qui ne sont plus des clients du hub.

OU

Une autre approche consiste à configurer l'utilisateur en ligne en tant que premier message de l'utilisateur vers le concentrateur. "Salut, je suis là". Et utilisez cette solution

 public class MyHub : Hub, IDisconnect { public Task Disconnect() { // Query the database to find the user by it's client id. var user = db.Users.Where(u => u.ConnectionId == Context.ConnectionId); return Clients.disconnected(user.Name); } } 

Pour gérer l'événement de déconnexion.

J'espère que je pourrais vous donner quelques idées.

SignalR est meilleur que le sondage en raison du trafic réseau impliqué dans les connexions db. Aussi, pensez à la version de signalR que vous utiliserez avec votre projet MVC car la dernière version de signalR ne supporte que .net 4.5.

En ce qui concerne le nombre de connexions, cela dépend de la quantité de mémoire que vous avez et du nombre de connexions que vous avez configurées dans IIS. Vous pouvez facilement gérer 1000 + sur une plate-forme décente.

Comme pour la réponse de Tom, vous pouvez intercepter des événements sur des hubs ou des interfaces signalR inférieures pour obtenir des comptes, déconnecter et connecter des événements.