web-dev-qa-db-fra.com

Node.Js + Socket.IO vs SignalR vs C # WebSocket Server

J'ai actuellement une application serveur TCP écrite en .Net qui reçoit et envoie des messages aux clients. Je cherche à créer une application Web, donc besoin de la couche de communication.

J'ai construit une application Node.JS + Socket.IO qui se connecte à mon TCP serveur), puis pousse la communication vers l'application Web et tout fonctionne correctement.

Je viens de lire sur SignalR comme une alternative pour le garder dans la pile. Net.

Cependant, j'ai également constaté que je pouvais écrire un serveur Websocket C #, une démo de base ici

Je suppose que ce serveur de base est ce que SignalR est mais avec évidemment beaucoup plus de fonctionnalités?

Ce que j’essaie de décider, c’est que j’ajoute simplement mon application actuelle TCP avec un serveur Websocket ou est-ce que je descends sur une route SignalR ou Node.js distincte? application exécutée, s’agit-il d’un service Windows, d’une application console ou de IIS?

70
Jon

SignalR ressemble à Socket.IO en ce qu'il prend en charge la négociation/le repli de transport. C'est un framework et non un serveur, vous devez donc l'héberger sur un serveur quelconque. Nous avons des hôtes pour ASP.NET, OWIN (par exemple Kayak) et self-Host. Vous pouvez donc l’exécuter facilement dans votre propre processus, par exemple. un service Windows.

SignalR a pris en charge les clients pour les navigateurs (JS), .NET, Windows Phone 7 et Silverlight. Il existe également des clients contribués pour des choses comme iOS, Mono Touch, etc.

SignalR vous donnera une API de niveau beaucoup plus élevé que les sockets brutes, ce qui constitue son gros avantage, vous permettant de faire des choses comme "RPC" du serveur aux clients de manière diffusée (ou ciblée).

73
Damian Edwards

Autres implications

J'ai utilisé les deux technologies et travaille des deux côtés des piles de .NET/node.

  1. Bien que je préfère le côté nœud de nos jours, si vous travaillez uniquement en .NET, SignalR est le choix évident. Inversement, si vous construisez tous vos projets dans le noeud, j'utiliserais socket.io ou sockjs . Si votre portée est suffisamment étroite pour que vous n'ayez pas à vous soucier des replis et de ce genre de choses, je vous conseillerais de vérifier le module ws car il est plus simple et plus léger pour vos dépendances. Dans le passé, socket.io était un problème pour Windows en raison de problèmes d'installation du fait que node-gyp n'installait pas les dépendances natives ( node-gyp nécessite de nombreuses étapes de configuration qui varient énormément selon la version de Windows. vous avez mais est requis pour les modules natifs C++). [~ # ~] update [~ # ~] Ce bit Windows n'est plus tellement pertinent, grâce à windows-build-tools .
  2. Si vous avez un équilibreur de charge et prévoyez d’exécuter SignalR, vous devrez configurer SQL ou Redis en tant que fond de panier pour le contourner. Vous aurez des problèmes similaires à traiter du côté socket.io et il existe [plusieurs méthodes prises en charge] [1] (dont une redis également).

Update - Suppression des informations jQuery car elles ne sont plus applicables

19
cchamberlain

Développer un serveur évolutif/sans danger TCP peut ne pas être une tâche facile. D'autre part, il existe de très jolies ressources sur Internet pour vous permettre de démarrer le vôtre. Par exemple, si vous êtes À la recherche de beaux projets WebSocket open source, mon conseil serait:

Alchemy Project : Bibliothèque WebSocket Open Source C #

Projet Fleck : Bibliothèque WebSocket Open Source C #

SignalR pourrait être agréable, mais il nécessite Windows Server 8/IIS 8 pour pouvoir fournir la fonctionnalité WebSocket.

Du côté des produits commerciaux, étant donné que la fonctionnalité websocket n’est pas disponible sur tous les navigateurs, je recommande PokeIn WebSocket et reverse Ajax Library. À partir de la version 2.0, il possède un serveur WebSocket intégré. Détails disponibles à partir de ici

15
Zuuum