位置: 编程技术 - 正文
推荐整理分享NodeJS学习笔记之Http模块(nodejs使用视频教程),希望有所帮助,仅作参考,欢迎阅读内容。
文章相关热门搜索词:nodejs 书,nodejs入门教程,nodejs使用视频教程,nodejs实例教程,nodejs入门教程,nodejs实例教程,nodejs入门教程,nodejs入门,内容如对您有帮助,希望把文章链接给更多的朋友!
一,开篇分析
首先“Http”这个概念大家应该比较熟悉了,它不是基于特定语言的,是一个通用的应用层协议,不同语言有不同的实现细节,但是万变不离其宗,思想是相同的,
NodeJS作为一个宿主运行环境,以JavaScript为宿主语言,它也有自己实现的一套标准,这篇文章我们就一起来学习一下 “Http模块” 。但是作为前提来说,
希望大家可以先阅读一下官网提供的api,有一个前置了解,这样就方便多了,以下是Http部分的api概览:
让我们先从一个简单例子开始,创建一个叫server.js的文件,并写入以下代码:
(node server.js)以下是运行结果:
二,细节分析实例
具体看一下这个小例子:
(1行):通过"require"引入NodeJS自带的"http"模块,并且把它赋值给http变量。
(2行):调用http模块提供的函数:"createServer" 。这个函数会返回一个新的web服务器对象。
参数 "requestListener" 是一个函数,它将会自动加入到 "request" 事件的监听队列。
当一个request到来时,Event-Loop会将这个Listener回调函数放入执行队列, node中所有的代码都是一个一个从执行队列中拿出来执行的。
这些执行都是在工作线程上(Event Loop本身可以认为在一个独立的线程中,我们一般不提这个线程,而将node称呼为一个单线程的执行环境),
所有的回调都是在一个工作线程上运行。
我们在再来看一下"requestListener"这个回调函数,它提供了两个参数(request,response),
每次收到一个请求时触发。注意每个连接又可能有多个请求(在keep-alive的连接中)。
"request"是http.IncomingMessage的一个实例。"response"是http.ServerResponse的一个实例。
一个http request对象是可读流,而http response对象则是可写流。
一个"IncomingMessage"对象是由http.Server或http.ClientRequest创建的,
并作为第一参数分别传递给"request"和"response"事件。
它也可以被用来访问应答的状态,头文件和数据。
它实现了 "Stream" 接口以及以下额外的事件,方法和属性。(具体参考api)。
(3行):“writeHeader”,使用 "response.writeHead()" 函数发送一个Http状态和Http头的内容类型(content-type)。
向请求回复响应头。"statusCode"是一个三位是的HTTP状态码,例如 。最后一个参数,"headers",是响应头的内容。
举个栗子:
注意:Content-Length 是以字节(byte)计算,而不是以字符(character)计算。
之前的例子原因是字符串 “Hello World !” 只包含了单字节的字符。
如果body包含了多字节编码的字符,就应当使用Buffer.byteLength()来确定在多字节字符编码情况下字符串的字节数。
需要进一步说明的是Node不检查Content-Lenth属性和已传输的body长度是否吻合。
statusCode是一个三位是的HTTP状态码, 例如:"" 。这里要说的是 "http.STATUS_CODES" ,全部标准"Http"响应状态码的集合和简短描述都在里面。
如下是源码参考:
节选自,Nodejs源码 ”http.js“ 行开始。
其实从客户端应答结果也不难看出:
(6行):”response.end“------当所有的响应报头和报文被发送完成时这个方法将信号发送给服务器。服务器会认为这个消息完成了。
每次响应完成之后必须调用该方法。如果指定了参数 “data” ,就相当于先调用 “response.write(data, encoding) ” 之后再调用 “response.end()” 。
(8行):”server.listen()“ ------ 服务器用指定的句柄接受连接,绑定在特定的端口。
标签: nodejs使用视频教程
本文链接地址:https://www.jiuchutong.com/biancheng/377952.html 转载请保留说明!友情链接: 武汉网站建设