Rozważałem wykonanie serwera czatowego przy użyciu pliku node.js/socket.io. Czy powinienem ustawić serwer TCP lub serwer HTTP? Wyobrażam sobie, że serwer tcp byłby bardziej wydajny, ale czy możesz wysyłać do niego inne rzeczy, takie jak załączniki do plików itp.? Jeśli tcp jest bardziej wydajny, o ile więcej? Zastanawiasz się również, ile jednoczesnych połączeń może obsługiwać jeden uchwyt serwera node.js? Czy więcej pracy wymaga TCP lub HTTP?Dyskusja: Serwer czatu przez node.js: HTTP lub TCP?
Odpowiedz
Mówisz o 2 całkowicie różnych podejściach tutaj - TCP jest protokołem warstwy transportowej, a HTTP jest protokołem warstwy aplikacji. HTTP (zwykle) działa przez TCP, więc niezależnie od wybranej opcji, nadal będzie działał przez TCP.
Pytanie dotyczące wydajności jest trochę dyskusyjne, ponieważ mówimy o innym OSI layers. Gdybyś poszedł na surowe gniazda TCP, twoje rozwiązanie byłoby prawdopodobnie bardziej wydajne - przynajmniej w paśmie - ponieważ HTTP zawiera całą masę dodatkowych danych (nagłówków), które prawdopodobnie nie mają znaczenia dla twoich celów (w zależności od skali czata program). To, o czym mówisz, to twój własny protokół warstwy aplikacji.
Możesz przesłać wszystko, co ci się podoba przez TCP - po tym, jak wszystkie HTTP mogą wysyłać załączniki i które działają przez TCP. FTP działa również przez TCP i jest przeznaczony wyłącznie do przesyłania "załączników". Aby to zrobić, musisz napisać protokół, aby mógł powiedzieć stronie zdalnej, że następujące dane były plikiem, a następnie wysłać dane pliku, a następnie poinformować stronę zdalną, że transfer został zakończony. Implementacje tego są bardzo różnorodne (podejście HTTP jest zupełnie inne niż podejście FTP), a twoje opcje są prawie nieskończone.
Nie wiem na pewno o limicie połączeń node.js, ale mogę powiedzieć z dużą dozą pewności, że jest on ograniczony przez system operacyjny. This może pomóc w opanowaniu odpowiedzi na to pytanie.
Można się zastanawiać, czy jest więcej pracy, aby to zrobić z TCP lub HTTP - jest to dużo pracy, aby to zrobić w obu. Prawdopodobnie chciałbym bardziej pochylić się nad wyborem opcji TCP. Podczas gdy protokół TCP wymagałby zaprojektowania protokołu, a nie aplikacji, jak również aplikacji, protokół HTTP nie jest szczególnie odpowiedni dla aplikacji dwukierunkowych, takich jak serwery czatu. Istnieje wiele implementacji czata za pośrednictwem protokołu HTTP, które używają AJAX, ale mogę powiedzieć z bolesnego doświadczenia, że są one pełne bólu w tylnej części.
Powiedziałbym, że powinieneś patrzeć tylko na HTTP, jeśli chcesz, aby punkt końcowy (tj. Klient) był przeglądarką. Jeśli masz zamiar napisać aplikację komputerową dla punktu końcowego, bezpośredni link TCP zdecydowanie byłby do zrobienia. Głównym powodem tego jest fakt, że HTTP działa w trybie żądanie-odpowiedź, w którym klient wysyła żądanie do serwera, a serwer odpowiada. Przez TCP można otworzyć pojedynczy strumień TCP, który można wykorzystać do komunikacji dwukierunkowej. Oznacza to, że serwer może natychmiast wysłać zdarzenie do klienta, podczas gdy przez HTTP trzeba czekać na wysłanie żądania przez klienta, aby można było odpowiedzieć zdarzeniem. Jeśli zamierzałeś użyć przeglądarki jako klienta, sprawisz, że cała operacja przesyłania plików będzie dużo trudniejsza (przynajmniej wysyłanie).
Istnieją sposoby implementacji tego poprzez HTTP za pomocą długiego odpytywania i push serwera (read this), ale może to być bardzo trudne do wdrożenia.
Jeśli zamierzasz zaimplementować to w sieci LAN (lub nawet w Internecie), warto wziąć pod uwagę UDP przez TCP - w aplikacji czatu zazwyczaj nie ma absolutnie żadnego znaczenia, czy wiadomości przychodzą we właściwej kolejności, oraz nawet gdyby tak było, użytkownicy prawdopodobnie nie mogliby pisać szybciej niż wariacje opóźnień sieci (prawdopodobnie < 100ms). W przypadku transferów plików możesz wynegocjować oddzielne gniazdo TCP do wymiany danych (np. FTP) lub wdrożyć jakiś system UDP ACK (np. TFTP).
Mam dużo więcej do powiedzenia na ten temat, ale w tej chwili nie mogę tego wyrazić słowami - w pewnym momencie mogę rozszerzyć tę odpowiedź.
Serwery czatu to program Hello World w węźle. Użyj http.
Jeśli chodzi o to, ile współbieżnych połączeń może obsłużyć, to wszystko zależy od systemu. Skonfiguruj prosty serwer czatu, a następnie spróbuj go porównać.
Sprawdź również http://search.npmjs.org/ i wyszukaj chat
dla kilku wskazówek.
- 1. Node.JS: Jak utworzyć serwer czatu HTTP?
- 2. Serwer C# TCP do prostego czatu
- 3. Tworzenie WebSockets między serwerem TCP i serwer HTTP w node.js
- 4. aplikacja czatu: node.js lub APE?
- 5. Dyskusja: Najlepszy sposób na zaimplementowanie czatu za pomocą pliku node.js/socket.io?
- 6. Serwer Socket.io nie jest obsługiwany przez serwer Node.js
- 7. Dlaczego HTTP używa TCP?
- 8. Określanie obsługiwanej wersji HTTP przez serwer WWW
- 9. TCP vs. Http Benchmark
- 10. Serwer i połączenie Julia TCP
- 11. Serwer proxy HTTP HTTP
- 12. Serwer Node.js z niestandardowym agentem Http i oprogramowaniem Connect.js Middleware
- 13. Biblioteka strumieniowania HTTP IP/iPhone'a lub serwer
- 14. PHP limit połączeń gniazda TCP - serwer Windows
- 15. serwer node.js i HTTP/2 (2.0) z plikiem express.js
- 16. Node.js - serwer zamknął połączenie?
- 17. Serwer HTTP za NATs
- 18. Przykładowy serwer TCP napisany w Rust
- 19. online Serwer Node.js
- 20. http.createserver vs net.createserver in node.js
- 21. Prosty serwer http
- 22. Jak zapobiec zwrotowi nagłówka http 'Serwer' przez Gunicorn?
- 23. wiele żądań HTTP GET w jednym połączeniu TCP/IP - przetwarzane równolegle lub sekwencyjnie
- 24. Redis pub/sub do serwera czatu w node.js
- 25. Klient Android i serwer Java Komunikacja TCP
- 26. Serwer Java NIO o dużym obciążeniu TCP
- 27. lekki serwer http C++
- 28. Serwer HTTP Programowanie
- 29. Serwer HTTP Http i uszkodzone rury
- 30. Serwer wielowątkowy TCP z bibliotekami POCO C++
Czy masz pojęcie, jak zrobić tcp ze stroną klienta node.js/socket.io? Mam to pytanie również tutaj: http://stackoverflow.com/questions/7340475/client-side-tcp-with-node-js-socket-io – Derek
btw. dzięki za wyjaśnienie. bardzo pomaga. Czy możesz jednak wyjaśnić więcej o udp i jego zaletach/wadach w porównaniu z tcp? Dzięki wielkie! – Derek
Czy utrata pakietów udp wpływa na aplikację do czatu? – Derek