J'envisageais de faire un serveur de chat en utilisant node.js/socket.io. Devrais-je en faire un serveur tcp ou un serveur http ? J'imagine que le serveur tcp serait plus efficace, mais peut-on lui envoyer d'autres choses comme des pièces jointes, etc. Si tcp est plus efficace, de combien ? De plus, je me demande juste combien de connexions simultanées un serveur node.js peut gérer ? Est-ce que c'est plus compliqué de faire du TCP ou du HTTP ?
Réponses
Trop de publicités?Vous parlez ici de deux approches totalement différentes - TCP est un protocole de couche de transport et HTTP est un protocole de couche d'application. HTTP fonctionne (généralement) sur TCP, donc quelle que soit l'option choisie, il fonctionnera toujours sur TCP.
La question de l'efficacité est en quelque sorte discutable, car il s'agit d'un système différent. Couches OSI . Si vous optez pour des sockets TCP bruts, votre solution sera probablement plus efficace - en termes de bande passante au moins - puisque HTTP contient tout un tas de données supplémentaires (les en-têtes) qui ne seront probablement pas pertinentes pour vos objectifs (en fonction de l'échelle du programme de chat). Ce que vous voulez développer ici, c'est votre propre protocole de couche d'application.
Vous pouvez envoyer tout ce que vous voulez via TCP - après tout, HTTP peut envoyer des pièces jointes et fonctionne via TCP. FTP fonctionne également sur TCP, et il est conçu uniquement pour le transfert de "pièces jointes". Pour ce faire, vous devriez écrire votre protocole de manière à ce qu'il puisse indiquer à la partie distante que les données suivantes sont un fichier, puis envoyer les données du fichier, et enfin indiquer à la partie distante que le transfert est terminé. Les implémentations sont nombreuses et variées (l'approche HTTP est complètement différente de l'approche FTP) et les options sont pratiquement infinies.
Je ne suis pas sûr de la limite de connexion de node.js, mais je peux affirmer avec une bonne dose de confiance qu'elle est limitée par le système d'exploitation. Le présent pourrait vous aider à trouver la réponse à cette question.
On peut se demander s'il est plus difficile de le faire avec TCP ou HTTP - c'est beaucoup de travail de le faire dans les deux cas. Je pencherais plutôt pour l'option TCP, qui est la meilleure solution. Tandis que TCP vous obligerait à concevoir un protocole plutôt qu'une application, HTTP n'est pas particulièrement adapté aux applications bidirectionnelles en direct telles que les serveurs de chat. Il existe de nombreuses implémentations de chat sur HTTP qui utilisent AJAX, mais je peux vous dire, par expérience, que c'est une véritable plaie.
Je dirais que vous ne devriez vous intéresser à HTTP que si vous avez l'intention que le point final (c'est-à-dire le client) soit un navigateur. Si vous comptez écrire une application de bureau pour le point final, une liaison TCP directe est certainement la meilleure solution. La principale raison en est que le protocole HTTP fonctionne selon le principe de la demande-réponse : le client envoie une requête au serveur, qui lui répond. Avec TCP, vous pouvez ouvrir un flux TCP unique, qui peut être utilisé pour une communication bidirectionnelle. Cela signifie que le serveur peut envoyer un événement au client instantanément, alors qu'avec HTTP, il faut attendre que le client envoie une requête pour pouvoir répondre avec un événement. Si vous aviez l'intention d'utiliser un navigateur comme client, cela rendra le transfert de fichiers beaucoup plus délicat (l'envoi au moins).
Il existe des moyens de mettre cela en œuvre via HTTP en utilisant l'interrogation longue et la poussée du serveur ( lire ceci ), mais sa mise en œuvre peut s'avérer fastidieuse.
Si vous comptez mettre cela en œuvre sur un réseau local (ou peut-être même sur l'internet), il vaut la peine d'envisager UDP plutôt que TCP - dans une application de chat, il n'est généralement pas absolument essentiel que les messages arrivent dans le bon ordre, et même si c'était le cas, les utilisateurs ne pourraient probablement pas taper plus vite que les variations de la latence du réseau (probablement <100ms). Ensuite, pour les transferts de fichiers, vous pouvez soit négocier un socket TCP séparé pour l'échange de données (comme FTP), soit implémenter une sorte de système UDP ACK (comme TFTP).
J'ai le sentiment qu'il y a beaucoup plus à dire sur ce sujet, mais pour l'instant je n'arrive pas à le formuler - il se peut que je prolonge cette réponse à un moment donné.
Les serveurs de chat sont le programme Hello World dans node. Utilisez http.
En ce qui concerne le nombre de connexions simultanées qu'il peut gérer, tout dépend de votre système. Mettez en place un simple serveur de chat et essayez ensuite de le comparer.
Consultez également http://search.npmjs.org/ et rechercher chat
pour obtenir quelques conseils.