我开始更多地了解这个"网络世界"工作,这就是我参加免费代码训练营课程的原因。我已经进行了前端开发,我非常喜欢它。现在我在后端部分。 后端对我来说更加模糊。有许多事情我不会得到,所以我希望有人可以帮助我。
首先,我了解了get方法。所以我做了:
var http = require('http');
然后提出了获取请求:
http.get(url, function callBack(response){
response.setEncoding("utf8");
response.on("data", function(data){
console.log(data);
});
});
问题1) 显然,这段代码"得到了#34;某个网址的回复。但有什么反应?我甚至没有特别要求任何东西。
继续...... 第二个练习要求我们监听TCP连接并创建服务器,然后写入该连接的日期和时间。所以这就是答案:
var server = net.createServer(function listener (socket){
socket.end(date);
});
server.listen(port);
问题2) 好的,所以我用net.createServer()创建了一个TCP服务器,当连接成功时,我输出了日期。但是哪里?当我把日期放在socket.end()中时实际发生了什么?
最后但并非最不重要...... 在上一次练习中,我被告知每次收到请求时都要创建一个HTTP服务器(什么?)来为服务器提供文本文件,这就是我所做的:
var server = http.createServer(function callback(request, response){
var read = fs.createReadStream(location);
read.pipe(response);
});
server.listen(port);
问题3) a)为什么我必须创建HTTP服务器而不是常规TCP?有什么区别? b)createReadStream做了什么? c)pipe()做什么?
如果有人可以帮助我,试图让解释更容易会对我有所帮助,因为我可以看到,在这个问题上相当愚蠢。
非常感谢你!
答案 0 :(得分:1)
这对Stackoverflow来说有点宽泛,它有利于解决特定问题的重点问题。但我感觉到你的痛苦,所以...
问题1:
Http.get
大致相当于请求网页。函数中的url是您请求的页面。响应将包括一些内容,如HTTP响应代码,但也(最重要的是)页面内容,这是您可能会追求的。在后端,这通常用于访问获取数据而不是实际网页的API,但传输机制是相同的。
问题2:
当您打开套接字时,您正在等待其他人请求连接。 (使用http.get()
时的方式。输出数据时,您向他们发送的响应与您在问题1中收到的响应类似。
问题3:
HTTP是比TCP更高级别的协议。这基本上意味着它更具体,TCP更通用(小学生会对该陈述产生问题,但这是一种理解它的简单方法)。 HTTP定义了下载网页时使用的GET
和POST
等内容。在协议栈中降低HTTP使用TCP。您可以使用TCP,但是您必须做更多的工作来解释进来的请求.HTTP库可以帮助您。其他协议(如FTP)也使用TCP,但它们的协议与HTTP不同。
答案 1 :(得分:0)
对于这个答案,你需要了解两件事。 IP地址是网站的数值,它是指向站点的服务器的地址。域名是从IP到NAMED系统的转换,它允许人们更容易地查看网站的名称,因此我们现在只需输入名称(www.hotdog.com),而不是为网站输入数字,如192.168.1.1。 )。这就是你的请求正在做的事情,它正在请求网站。
socket.end是您正在调用的方法。 socket.end“半关闭套接字。即,它发送一个FIN数据包。服务器仍然可以从nodejs.org文档中发送一些数据”,所以基本上它会在你发送的参数中关闭套接字一半in,这是今天的日期。
3a HTTP适用于浏览器,这就是为什么你这样做的原因,对于你在本地或其他地方托管的网页。
3b createreadstream()返回一个新的ReadStream对象。 (参见可读流)。
请注意,与可读流(16 kb)上为highWaterMark设置的默认值不同,此方法返回的流对于同一参数的默认值为64 kb。
3c pipe: 在可读流上调用stream.pipe()方法时会发出'pipe'事件,并将此writeable添加到其目标集。