借助于各种框架强大的力量,Node.js的开发已经变得越来越便捷而高效。然而抛开这些框架,我们是否又对Node.js的核心模块及底层有一个清晰和深刻的认识呢?本系列文章将会与各位一起重新了解学习Node.js的各个核心模块。
HTTP协议是世界上广泛使用的应用层通信协议,而通过Node的核心模块HTTP,我们可以方便快速的构建自己的HTTP服务器和客户端,并在两者之间进行通信传递数据。
HTTP模块API一览
Class: http.Agent
一般的通信过程都会重复'请求连接'到'通信'到'断开连接'这个过程,然而对于一个持续长时间进行的通信过程而言,不停的连接、断开、重新连接显然是浪费通信资源且没有必要的,为了满足这种场景的需求,“长连接”便出现了。http.Agent 的作用正是为了在Node中实现长连接并池化socket。
Class: http.ClientRequest
该对象在内部被创建,并从 http.request() 返回。 用于处理客户端请求,是一个事件发射器。可通过其内部方法进行中止请求、完成请求、设置超时、发送数据块等等操作。
Class: http.Server
服务器对象,监听了客户端请求、建立连接、服务器关闭等等在内的多个事件,可通过其方法设置服务器超时、监听指定端口和主机、关闭服务器等。
Class: http.ServerResponse
该对象由HTTP服务器内部创建,代表服务器响应,可进行响应状态码处理、响应超时设置、消息头处理等操作。
Class: http.IncomingMessage
该对象由 http.server 或 http.ClientRequest 创建,并作为第一个参数分别递给 request 和 response 事件。 它可以用来访问响应状态、消息头、以及数据。
http.METHODS
解析器支持的HTTP方法列表。
http.STATUS_CODES
标准的HTTP状态码和描述集合。
http.createServer([requestListener])
用于创建一个HTTP服务器,返回的是 http.Server 实例。
http.get(options[,callback])
get请求便捷方法,也就是 http.request() 方法的特例。
http.globalAgent
agent代理的全局实例对象,所有HTTP客户端请求的默认agent。
http.request(options[,callback])
发起HTTP请求的方法,返回的是 http.ClientRequest 实例对象。
HTTP代码实战
接下来我们将运用HTTP模块的API来创建一个HTTP服务器及客户端,并让两者之间进行简单的通信。
创建HTTP服务器
const http = require('http');
const hostname = '127.0.0.1';
const port = 3456;
const server = http.createServer((req, res)=>{
console.log(`request url: ${req.url}`);
if (req.url === '/http') {
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
res.end('this is server response.');
} else {
res.statusCode = 404;
res.end('not found!');
}
req.on('data', (chunk) => {
console.log(`request data from client:
${chunk}`);
});
});
server.listen(port, hostname, ()=>{
console.log(`Server running at
http://${hostname}:${port}/`);
});
以上代码,通过 http.createServer 方法创建了一个服务器,其监听的主机也就是代码运行的本机,端口号则是3456,该服务器的功能为判断客户端请求的url地址,如果是'/http',则返回200状态码,和一条消息给客户端,否则,返回404状态码和'not found'消息。
创建HTTP客户端
const http = require('http');
let options = {
hostname: '127.0.0.1',
port: 3456,
path: '/http',
method: 'post',
}
let req = http.request(options, (res) => {
console.log(`STATUS:
${res.statusCode}`);
console.log(`HEADERS:
${JSON.stringify(res.headers)}`);
res.setEncoding('utf8');
res.on('data', (chunk) => {
console.log(`response from server : ${chunk}`);
});
res.on('end', () => {
console.log('No more data in response.');
});
});
req.on('error', (e) => {
console.log(`problem with request:
${e.message}`);
});
req.write('this is client request.');
req.end();
以上代码作为一个HTTP客户端,通过 http.request 方法向之前创建好的服务器发送POST请求,请求的地址为'/http',发送给服务器‘this is client request.’字符串,并接受服务器返回的状态码、消息头和数据。
注意:以上服务器和客户端代码分别构建在两个js文件中,可以通过命令行直接运行。
以上,我们简要的回顾了HTTP模块的顶层API,并构建了一个简单的服务器和客户端通信的示例。
本文分享自 Node Python Go全栈开发 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!