【问题标题】:Need some clarification on nodejs concepts需要对 nodejs 概念进行一些澄清
【发布时间】:2017-07-17 13:29:21
【问题描述】:

我开始更多地了解这个“网络世界”的运作方式,这就是我参加免费代码营课程的原因。我已经开始了前端开发,我真的很喜欢它。现在我在后端部分。 后端对我来说更加模糊。有很多事情我没有得到,所以我希望有人可以帮助我。

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

var http = require('http');

然后发出一个get请求:

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

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

继续... 第二个练习要求我们监听 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() 是做什么的?

如果有人可以帮助我,试着让解释更简单会对我有很大帮助,因为正如你所见,我在这个问题上非常愚蠢。

非常感谢!

【问题讨论】:

  • I didn't even ask for anything in particular - 是的,你做了,响应是给定url的响应
  • 虽然这不是堆栈溢出的典型问题格式,但看到有人真正了解如何编写程序并且在经过一些初步研究后表现出基本掌握后只想要真正的澄清,这令人耳目一新。 +1

标签: javascript node.js backend


【解决方案1】:

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

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

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

问题 3: HTTP 是比 TCP 更高级别的协议。这基本上意味着它更具体,而 TCP 更通用(学究们会对此陈述提出异议,但这是一种易于理解的方法)。 HTTP 定义了您在下载网页时使用的 GETPOST 之类的内容。在协议栈的底层 HTTP 使用 TCP。你可以只使用 TCP,但你必须做更多的工作来解释进来的请求。HTTP 库为你工作。 FTP 等其他协议也使用 TCP,但它们与 HTTP 不同。

【讨论】:

  • 非常感谢您的回答。这对我帮助很大。顺便说一句,如果我想问更广泛的问题,我应该去哪里?
  • 老实说,我认为对于广泛的问题,Google 是您的最佳选择。它会出现这样的情况:stackoverflow.com/questions/29869999/… 这或多或少是你的第三个问题。
【解决方案2】:
  1. 对于这个答案,您需要了解两件事。 IP 地址是网站的数值,它是指向该网站的服务器的地址。域名是从 IP 到 NAMED 系统的转换,它使人们可以更轻松地查看网站名称,因此我们现在只需输入名称(www.hotdog.com )。这就是您的 get 请求正在做的事情,它正在请求站点。

  2. socket.end 是您正在调用的方法。 socket.end “半关闭套接字。即,它发送一个 FIN 数据包。服务器可能仍会发送一些数据”来自 nodejs.org 文档,所以基本上它会在你发送的参数处关闭你的套接字in,即今天的当前日期。

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

3a HTTP 适用于浏览器,这就是您这样做的原因,对于您在本地托管的网页或其他内容。

3b createreadstream() 返回一个新的 ReadStream 对象。 (参见可读流)。

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

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

【讨论】:

  • 非常感谢您的回答。这对我帮助很大。顺便说一句,如果我想问更广泛的问题,我应该去哪里?
  • 我会使用 google,如果你是一个视觉音频学习者,你可以尝试不同的学习资源,比如 youtube 视频,或者如果你从阅读中学习得更好,你可以去看看 nodejs 的文章和文档。除非你每天都这样做,否则你不会取得进步,并确保你阅读并理解你正在做的事情背后的原则。 Google 是作为开发人员解决问题的最佳方式。如果这些对您有所帮助,请选择一个您想给予积分的答案,并为那些提供帮助的人投票。祝杰夫好运!
  • 你会投票还是选择答案?帮助社区!
猜你喜欢
  • 2013-07-22
  • 2013-08-06
  • 1970-01-01
  • 2018-09-13
  • 1970-01-01
  • 2013-04-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多