下面代码为利用nodejs
的net
包发起http请求,这种方法怎么判断服务器响应结束呢?暂时想到是使用setTimeout
方法,4s后结束tcp连接。但是这显然不是一个好的解决方法。
var fn = function (path,callback) {
const socket = net.createConnection(80,'jandan.net');
socket.write( // 发送http请求报文
'GET '+path+' HTTP/1.1\r\n'+
header
);
// socket.setTimeout(4000,function () {
// socket.end();
// });
socket.setEncoding('utf-8');
var html = '';
socket.on('data',function (chunk) {
html+=chunk;
});
socket.on('end',function () {
callback(html);
});
}
然后是直接使用http
包,可以优雅的监听res
的end
事件,那请问底层如何实现将一次tcp
连接,抽象成request
和response
的呢,或者说我如何使用net包实现同样的效果呢?
实际上这里的res
是IncomingMessage
类型,
https://nodejs.org/dist/latest-v4.x/docs/api/http.html#http_class_http_incomingmessage
var gn = function (path,callback) {
http.request(
{
hostname: "jandan.net",
path: path
},
function (res) {
var html = '';
res.setEncoding('utf-8');
res.on('data',function (chunk) {
html+=chunk;
});
res.on('end',function () {
callback(html);
})
}
).end();
};