http.createserver与node.js中的net.createserver

时间:2015-04-25 19:54:05

标签: node.js tcp

我无法理解node.js中net.createserver和http.createserver之间的区别。

我已经阅读了这两个网址上的两种方法的文档 https://nodejs.org/api/net.html#/net_nethttps://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”一书中的聊天应用程序示例。

3 个答案:

答案 0 :(得分:36)

http.createServer()设置一个处理HTTP协议的服务器,它确实是通过tcp传输的。 net.createServer()创建一个服务器,该服务器只知道TCP连接何时发生,数据是否已传输,等等,但不知道是否已收到有效的HTTP请求等等。

如果您正在撰写网络服务器,请http.createServer()优先于net.createServer(),因为它可以为您节省大量工作。如果您正在编写其他类型的服务器,请不要使用http.createServer()

答案 1 :(得分:12)

我不太了解Node.js,但我对网络有所了解。 HTTP是一种在OSI模型的第7层(应用程序)层上工作的协议。 TCP是在OSI模型的第4(传输)层上工作的协议。正如你所说,是的HTTP在TCP之上工作。由http.createServer()创建HTTP服务器的选项就在那里,因此您不必自己使用net.createServer()来实现它。协议TCP可能被许多应用程序使用,您可以创建自己的协议,或者实现一些不同于HTTP的协议,例如:FTP,DNS,SMTP,Telnet等等。

答案 2 :(得分:0)

直接从Node Net documentation开始。 NET是您可以创建的基本的准系统服务器。这对于设置cluster of servers并允许简单的连接特别有用,但是在此基础上,您将需要通信协议,即HTTP,该HTTP实际上是NET服务器的核心。

The net module provides an asynchronous network API for creating stream-based TCP or IPC servers (net.createServer()) and clients (net.createConnection()).

HTTP documentation开始。 HTTP是根据客户端请求传输大量数据并随后生成响应的常用方法。它是通过Internet进行通信的标准方式,它引入了握手的概念,并且是通过REST协议完成的,您知道通信的通常请求和响应方式。

The HTTP interfaces in Node.js are designed to support many features of the protocol which have been traditionally difficult to use. In particular, large, possibly chunk-encoded, messages. The interface is careful to never buffer entire requests or responses — the user is able to stream data.

Websocket是对HTTP标头的升级,具有较低的延迟和较少的服务器负载,并且会话最少。如果您要进行点对点通信,那就是您想要的方式。