需要对nodejs概念进行一些说明

我开始更多地了解这个“networking世界”是如何工作的,这就是为什么我要参加免费密码营的课程。 我已经采取了前端开发,我真的很喜欢它。 现在我在后端部分。 后端对我来说更雾。 有很多事情我不明白,所以我希望有人能帮助我。

首先我了解了get方法。 所以我做了:

var http = require('http'); 

然后做出了要求:

 http.get(url, function callBack(response){ response.setEncoding("utf8"); response.on("data", function(data){ console.log(data); }); }); 

问题1)显然,这段代码“获得”来自某个URL的响应。 但是什么反应? 我什至没有特别要求。

继续…第二个练习要求我们听一个TCP连接并创build一个服务器,然后写出连接的date和时间。 所以这里是答案:

 var server = net.createServer(function listener (socket){ socket.end(date); }); server.listen(port); 

问题2)好吧,我用net.createServer()创build了一个TCP服务器,当连接成功时,我输出了date。 但是哪里? 当我把date放在socket.end()中时,实际发生了什么?

最后但并非最不重要…在上一个练习中,我被告知创build一个HTTP服务器(什么?)来服务器每次收到请求的文本文件,这就是我所做的:

 var server = http.createServer(function callback(request, response){ var read = fs.createReadStream(location); read.pipe(response); }); server.listen(port); 

问题3)a)为什么我必须创build一个HTTP服务器而不是常规的TCP? 有什么不同? b)createReadStream是做什么的? c)pipe()是做什么的?

如果有人能够帮助我,试图让解释变得容易一些,这对我来说是很有帮助的,因为正如你所看到的那样,在这个问题上非常愚蠢。

万分感谢!

这对Stackoverflow来说有点宽泛,它有利于解决特定问题的重点问题。 但是我感觉到你的痛苦,所以…

问题1: Http.get大致相当于请求一个网页。 函数中的url是你正在请求的页面。 响应将包括几个东西,如HTTP响应代码,但也(最重要的)页面的内容,这可能是你后面的内容。 在后端,这通常用于获取获取数据的API而不是实际的网页,但传输机制是相同的。

问题2:当您打开一个套接字时,您正在等待其他人请求连接。 (你使用http.get() ,当你输出数据的时候,你会发送一个类似你在问题1中收到的响应。

问题3: HTTP是比TCP更高级别的协议。 这基本上意味着它更具体,TCP更普遍(侍者会对这个陈述有所质疑,但这是理解它的一个简单方法)。 HTTP定义了您在下载网页时使用的GETPOST等内容。 在协议栈中,HTTP使用TCP。 你可以使用TCP,但是你将不得不做更多的工作来解释这些请求.HTTP库是为你工作的。 像FTP这样的其他协议也使用TCP,但它们与HTTP不同。

  1. 对于这个答案,你需要了解两件事情。 IP地址是网站的数字值,它是指向该网站的服务器的地址。 域名是从IP到NAMED系统的转换,它允许人类更容易地查看网站的名称,因此,而不是像192.168.1.1那样为网站input数字,我们现在只需键入名称(www.hotdog.com )。 这就是你的请求正在做什么,它正在请求网站。

  2. socket.end是一个你正在调用的方法。 socket.end“半closures套接字,即发送一个FIN数据包,服务器仍然可以从nodejs.org文档发送一些数据”,所以基本上它会在你发送的参数上closures一半的套接字在,这是今天的当前date。

  3. HTTP是超文本传输​​协议, TCP (传输控制协议)是两台计算机之间的链接

3a HTTP是针对浏览器的,所以这就是为什么你这样做,为你在本地或东西托pipe的网页。

3b createreadstream()返回一个新的ReadStream对象。 (请参阅可读stream)。

请注意,与可读stream(16 kb)上为highWaterMark设置的默认值不同,此方法返回的stream对于相同参数的默认值为64 kb。

3c pipe道 :在可读stream上调用stream.pipe()方法时,会发出'pipe'事件,并将此可写入添加到其目标集。