Подтвердить что ты не робот

Обсуждение: Чат-сервер через node.js: HTTP или TCP?

Я рассматривал возможность создания чат-сервера с помощью node.js/socket.io. Должен ли я сделать это tcp-сервер или http-сервер? Я бы предположил, что tcp-сервер будет более эффективным, но вы можете отправить ему другие вещи, например, вложения файлов и т.д.? Если tcp более эффективен, тем более? Кроме того, просто интересно, сколько одновременных соединений может обрабатывать один сервер node.js? Это больше работы для работы с TCP или HTTP?

4b9b3361

Ответ 1

Здесь вы говорите о двух совершенно разных подходах: TCP - это протокол транспортного уровня, а HTTP - протокол уровня приложения. HTTP (обычно) работает через TCP, поэтому, какой бы вариант вы ни выбрали, он все равно будет работать через TCP.

Вопрос эффективности - это спорный вопрос, потому что вы говорите о разных уровнях OSI. Если бы вы пошли на сырые TCP-сокеты, ваше решение, вероятно, было бы более эффективным - по крайней мере в полосе пропускания - поскольку HTTP содержит целую кучу дополнительных данных (заголовков), которые, вероятно, будут неактуальны для ваших целей (в зависимости от масштаба чата программа). Что вы говорите о разработке, есть собственный протокол уровня приложения.

Вы можете отправлять все, что вам нравится, по TCP - после того, как HTTP может отправлять вложения, и это работает через TCP. FTP также работает через TCP, и он предназначен исключительно для передачи "вложений". Для этого вам нужно будет написать свой протокол, чтобы он мог сообщить удаленной стороне, что следующие данные были файлом, затем отправить данные файла, а затем сообщить удаленной стороне, что передача завершена. Реализации этого много и разнообразны (подход HTTP полностью отличается от подхода FTP), и ваши возможности в значительной степени бесконечны.

Я не знаю точно о пределе соединения node.js, но могу с уверенностью сказать, что он ограничен операционной системой. Это может помочь вам ответить на этот вопрос.

Это спорно, является ли она больше работы, чтобы сделать это с TCP или HTTP - это много работы, чтобы сделать это в обоих. Вероятно, я предпочел бы лучше использовать опцию TCP. В то время как TCP потребует от вас разработки протокола, а не /, а также приложения, HTTP не подходит для живых, двухсторонних приложений, таких как чат-серверы. Существует множество реализаций чата через HTTP, которые используют AJAX, но я могу рассказать вам от мучительного опыта, что они являются полной болью в тылу.

Я бы сказал, что вы должны смотреть только на HTTP, если вы предполагаете, что конечная точка (т.е. клиент) будет браузером. Если вы собираетесь написать настольное приложение для конечной точки, прямой канал TCP определенно станет для вас способом. Основная причина этого заключается в том, что HTTP работает в режиме запроса-ответа, когда клиент отправляет запрос на сервер, и сервер отвечает. Через TCP вы можете открыть один поток TCP, который может использоваться для двунаправленной связи. Это означает, что сервер может мгновенно вывести событие клиенту, в то время как по HTTP вы должны ждать, пока клиент отправит запрос, чтобы вы могли ответить событием. Если вы намеревались использовать браузер в качестве клиента, это сделает всю передачу файлов более сложной (по крайней мере, отправкой).

Есть способы реализовать это через HTTP, используя длительный опрос и push-сервер (прочитать это), но это может быть реальной болью для реализации.

Если вы собираетесь реализовать это в локальной сети (или, возможно, даже через Интернет), стоит рассмотреть UDP через TCP - в приложении чата обычно не обязательно критически важно, чтобы сообщения поступали в правильном порядке и даже если бы это было так, пользователи, вероятно, не могли бы печатать быстрее, чем изменения в сетевой задержке (вероятно, < 100ms). Затем для передачи файлов вы можете либо согласовать отдельный TCP-сокет для обмена данными (например, FTP), либо реализовать какую-то систему UDP ACK (например, TFTP).

Я чувствую, что на эту тему есть еще много, но сейчас я не могу выразить это словами. Я могу в какой-то момент продлить этот ответ.

Ответ 2

Серверы чата - это программа Hello World в node. Используйте http.

Что касается вопроса о том, сколько одновременных соединений он может обрабатывать, все зависит от вашей системы. Настройте простой чат-сервер, а затем попробуйте сравнить его.

Кроме того, проверьте http://search.npmjs.org/ и найдите chat для нескольких указателей.