Frage

Ich habe darüber nachgedacht, einen Chat -Server mit node.js/socket.io zu machen. Sollte ich es zu einem TCP -Server oder einem HTTP -Server machen? Ich würde mir vorstellen, dass TCP Server effizienter wäre, aber können Sie andere Dinge wie Dateianhänge usw. senden? Wenn TCP effizienter ist, wie viel mehr? Wenn Sie sich nur fragen, wie viele gleichzeitige Verbindungen ein Node.js -Server verarbeiten können? Ist es mehr Arbeit, TCP oder HTTP zu machen?

War es hilfreich?

Lösung

Sie sprechen hier über 2 völlig unterschiedliche Ansätze - TCP ist ein Transportschichtprotokoll und HTTP ist ein Anwendungsschichtprotokoll. HTTP (normalerweise) arbeitet über TCP. Aus welchen Option Sie wählen, wird sie weiterhin über TCP betrieben.

Die Effizienzfrage ist eine Art Streitpunkt, weil Sie über andere sprechen OSI -Schichten. Wenn Sie sich für RAW -TCP -Sockeln entscheiden, wäre Ihre Lösung wahrscheinlich effizienter - zumindest in Bandbreite -, da HTTP eine ganze Reihe zusätzlicher Daten (die Header) enthält, die wahrscheinlich für Ihre Zwecke irrelevant sind (je nach Skala des Chat Programm). Was Sie über die Entwicklung sprechen, es gibt Ihr eigenes Anwendungsschichtprotokoll.

Sie können alles senden, was Sie über TCP senden - schließlich können HTTP Anhänge senden und das über TCP funktioniert. FTP arbeitet auch über TCP und ist nur für die Übertragung von "Anhängen" konzipiert. Um dies zu tun, müssten Sie Ihr Protokoll so schreiben, dass es der Remote -Partei mitteilen konnte, dass es sich bei den folgenden Daten um eine Datei handelt, und dann die Dateidaten senden und der Remote -Partei dann mitteilen, dass die Übertragung abgeschlossen ist. Implementierungen davon sind vielfältig und unterschiedlich (der HTTP -Ansatz unterscheidet sich völlig vom FTP -Ansatz) und Ihre Optionen sind ziemlich unendlich.

Ich weiß nicht genau das, was die Verbindungsgrenze für Knoten.js -Verbindungsgrenze mit einem angemessenen Vertrauensaussatz sagen kann, dass er durch das Betriebssystem begrenzt ist. Dies Könnte Ihnen helfen, sich mit der Antwort auf diese Frage auseinanderzusetzen.

Es ist fraglich, ob es mehr Arbeit ist, es mit TCP oder HTTP zu tun - es ist eine Menge Arbeit, dies in beiden zu tun. Ich würde mich wahrscheinlich mehr dazu neigen, die TCP -Option zu sein, die die beste Wahl ist. Während TCP Sie benötigen, um ein Protokoll und nicht/eine Anwendung zu entwerfen, ist HTTP nicht besonders für Live-2-Wege-Anwendungen wie Chat-Server geeignet. Es gibt viele Implementierungen von Chat über HTTP, die AJAX verwenden, aber ich kann Ihnen aus schmerzhaften Erfahrung sagen, dass sie im hinteren Ende ein völliger Schmerz sind.

Ich würde sagen, dass Sie sich nur auf HTTP ansehen sollten, wenn Sie den Endpunkt (dh der Client) als Browser beabsichtigen. Wenn Sie eine Desktop -App für den Endpunkt schreiben möchten, wäre ein direkter TCP -Link auf jeden Fall der richtige Weg. Der Hauptgrund dafür ist, dass HTTP auf eine Art und Weise reagiert, bei der der Client eine Anforderung an den Server sendet und der Server antwortet. Über TCP können Sie einen einzelnen TCP-Stream öffnen, der für die bidirektionale Kommunikation verwendet werden kann. Dies bedeutet, dass der Server ein Ereignis sofort an den Client weitergeben kann, während Sie über HTTP warten müssen, bis der Client eine Anfrage sendet, damit Sie mit einem Ereignis antworten können. Wenn Sie einen Browser als Client verwenden wollten, wird die gesamte Datei -Übertragung viel schwieriger (das Senden zumindest).

Es gibt Möglichkeiten, dies über HTTP mithilfe von Langzeit- und Serverschub zu implementieren (lesen Sie dies) Aber es kann ein echter Schmerz sein, um zu implementieren.

Wenn Sie dies in einem LAN (oder möglicherweise sogar über das Internet) implementieren möchten, sollten Sie UDP über TCP in Betracht ziehen - in einer Chat -Anwendung ist es normalerweise nicht absolut aufwendig, dass Nachrichten in der richtigen Reihenfolge ankommen, und selbst wenn dies war Benutzer könnten wahrscheinlich nicht schneller eingeben als die Variationen der Netzwerklatenz (wahrscheinlich <100 ms). Für Dateiübertragungen können Sie dann entweder einen separaten TCP -Socket für den Datenaustausch (wie FTP) aushandeln oder eine Art UDP -ACK -System (wie TFTP) implementieren.

Ich habe das Gefühl, dass es zu diesem Thema noch viel mehr zu sagen gibt, aber im Moment kann ich es nicht in Worte fassen - ich kann diese Antwort irgendwann erweitern.

Andere Tipps

Chat -Server sind das Hello World -Programm im Knoten. Verwenden Sie HTTP.

Was die Frage angeht, wie viele gleichzeitige Verbindungen umgehen können, hängt alles von Ihrem System ab. Richten Sie einen einfachen Chat -Server ein und versuchen Sie es mit dem Benchmarking.

Schauen Sie sich auch an http://search.npmjs.org/ und suchen chat Für ein paar Hinweise.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top