Question

Je considérais faire un serveur de chat en utilisant Node.js / socket.io. Dois-je faire un serveur tcp ou un serveur http? J'imagine tcp serveur serait plus efficace, mais pouvez-vous envoyer d'autres choses à comme des pièces jointes, etc? Si tcp est plus efficace, combien plus? En outre, en se demandant combien de connexions simultanées peut-on Node.js poignée de serveur? Est-il plus de travail à faire TCP ou HTTP?

Était-ce utile?

La solution

Vous parlez de 2 approches totalement différentes ici - TCP est un protocole de couche de transport et HTTP est un protocole de couche d'application. HTTP (généralement) fonctionne sur TCP, donc quelle que soit l'option choisie, il sera toujours en fonctionnement sur TCP.

La question de l'efficacité est en quelque sorte un point discutable, parce que vous parlez de différentes couches OSI de href="http://en.wikipedia.org/wiki/OSI_model" . Si vous êtes allé pour les sockets TCP brut, votre solution serait probablement plus efficace - la bande passante au moins - puisque HTTP contient tout un tas de données supplémentaires (les en-têtes) qui serait probablement pas pertinente à vos besoins (selon l'échelle du chat programme). Qu'est-ce que vous parlez de développer il y a votre propre protocole de couche d'application.

Vous pouvez envoyer tout ce que vous comme sur TCP - après tout HTTP peut envoyer des pièces jointes, et qui fonctionne sur TCP. FTP fonctionne également sur TCP, et qui est conçu uniquement pour le transfert de « pièces jointes ». Pour ce faire, vous devez écrire votre protocole de sorte qu'il était en mesure de dire la partie à distance que les données suivantes ont été un fichier, puis envoyer les données de fichier, puis dire la partie à distance que le transfert est terminé. De ce Implémentations sont nombreuses et variées (l'approche HTTP est tout à fait différente de l'approche FTP) et vos options sont à peu près infini.

Je ne sais pas pour sûr de la limite de connexion de Node.js, mais je peux dire avec une quantité juste de confiance qu'il est limité par le système d'exploitation. Ce pourrait vous aider à se familiariser avec la réponse à cette question.

On peut se demander si elle est plus de travail à faire avec TCP ou HTTP - il y a beaucoup de travail à faire dans les deux. Je serais probablement pencher plus vers l'option TCP étant votre meilleur pari. Alors que le TCP vous avez besoin de concevoir un protocole plutôt que / ainsi qu'une application HTTP n'est pas particulièrement adapté aux applications en direct, 2 voies comme serveurs chat. Il existe de nombreuses implémentations de discussion sur HTTP que l'utilisation d'AJAX, mais je peux vous dire par expérience douloureuse qu'ils sont une douleur complète dans l'extrémité arrière.

Je dirais que vous ne devriez regarder HTTP si vous envisagez le point final (à savoir le client) d'être un navigateur. Si vous allez écrire une application de bureau pour le point final, un lien TCP directe serait certainement la voie à suivre. La principale raison est que HTTP fonctionne d'une manière requête-réponse, où le client envoie une requête au serveur, et le serveur répond. Sur TCP vous pouvez ouvrir un seul flux TCP, qui peut être utilisé pour la communication bidirectionnelle. Cela signifie que le serveur peut pousser un événement au client instantanément, alors que sur HTTP, vous devez attendre que le client d'envoyer une demande, afin que vous puissiez répondre à un événement. Si vous aviez l'intention d'utiliser un navigateur en tant que client, il fera beaucoup plus délicate toute la chose de transfert de fichiers (l'envoi d'au moins).

Il existe des moyens pour mettre en œuvre ce sur HTTP à l'aide à long sondages et push serveur ( lire cette ) mais il peut être une vraie douleur à mettre en œuvre.

Si vous allez mettre en œuvre ce sur un réseau local (ou peut-être même sur Internet), il est utile d'envisager UDP sur TCP - dans une application de chat est généralement pas absolument essentiel à la mission que les messages arrivent dans l'ordre, et même si elle était, les utilisateurs ne seront probablement pas en mesure de taper plus vite que les variations de la latence du réseau (probablement <100 ms). Ensuite, pour les transferts de fichiers que vous pouvez soit négocier un socket TCP séparé pour l'échange de données (comme FTP), ou mettre en œuvre une sorte de système UDP ACK (comme TFTP).

Je sens qu'il ya beaucoup plus à dire sur ce sujet, mais en ce moment je ne peux pas mettre en mots -. Je transmets cette réponse à un moment donné

Autres conseils

serveurs de chat sont le programme Bonjour mondial dans le nœud. Utilisez http.

En ce qui concerne la question du nombre de connexions simultanées peut-il gérer, que tout dépend de votre système. Mettre en place un simple serveur de chat et puis essayer de le comparant.

En outre, consultez http://search.npmjs.org/ et la recherche de chat pour quelques pointeurs.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top