Http.createserver vs net.createserver в node.js
У меня возникли проблемы с пониманием разницы между net.createserver и http.createserver в node.js.
Я прочитал документацию для обоих методов, расположенных по этим двум URL-адресам
https://nodejs.org/api/net.html#/net_net,
https://nodejs.org/api/http.html#/http_class_http_server.
Я понимаю, что http.createserver создает http-сервер. Однако в документации указано, что net.createserver создает tcp-сервер. Я понимаю, что tcp - это протокол передачи, на котором находится http, и что http-серверы настроены на чтение заголовков HTTP-запросов. Я также хорошо понимаю концепцию даже излучателей в node.js. Тем не менее, я не понимаю это понятие сервера tcp и почему его можно было бы сделать в node.js. В контексте я кодирую пример приложения чата в книге "node.js in action".
Ответы
Ответ 1
http.createServer()
настраивает сервер, который обрабатывает HTTP-протокол, который действительно передается через tcp. net.createServer()
создает сервер, который просто понимает, когда произошло TCP-соединение, и данные были переданы и т.д., но ничего не знает о том, был ли получен действительный HTTP-запрос и т.д.
Если вы пишете веб-сервер, пользуйтесь http.createServer()
over net.createServer()
, так как это сэкономит вам много работы. Если вы пишете какой-либо другой сервер, не используйте http.createServer()
.
Ответ 2
Я мало знаю о Node.js, но я знаю кое-что о сетях. HTTP - это протокол, который работает на 7-м (Application) уровне модели OSI. TCP - это протокол, который работает на 4-м (транспортном) уровне модели OSI. Как вы сказали, HTTP работает поверх TCP. Возможность создания HTTP-сервера с помощью http.createServer()
заключается в том, что вам не нужно реализовывать его самостоятельно, используя net.createServer()
. Протокол TCP может использоваться множеством приложений, вы можете создать свой собственный или реализовать какой-то другой протокол, кроме HTTP, например: FTP, DNS, SMTP, Telnet и многое другое.