简体   繁体   English

http.ClientRequest套接字不发出数据事件

[英]http.ClientRequest socket doesn't emit a data event

I would like to get TTFB with http module. 我想使用http模块获取TTFB The only way (IMO) to do it, is to add listener to a socket data event. 唯一的方法(IMO)是将侦听器添加到套接字数据事件。 But it doesn't seem to work. 但这似乎不起作用。

Here is a code example. 这是一个代码示例。

var http = require('http');

var request = http.request('http://nodejs.org/');
request.end();

request.on('socket', function(socket) {
    socket.once('data', function TTFB() {
        console.log('Never happen');
    });
});

request.on('response', function(response) {
    console.log('status code', response.statusCode);
    response.on('data', function noop(){});

    response.on('end', function() {
        console.log('Bytes read', request.socket.bytesRead);
    });
});

Socket doesn't have a data event. 套接字没有数据事件。 Try listening on connect. 尝试在连接上收听。

request.on('socket', function(socket) {
    socket.once('connect', function TTFB() {
        //Socket has been assigned to a request.
    });
});

You can see the events that socket emits by inspecting the socket object. 您可以通过检查套接字对象来查看套接字发出的事件。

_events: {
    end: {
        [Function: g] listener: [Function: onend]
    },
    finish: [Function: onSocketFinish],
    _socketEnd: [Function: onSocketEnd],
    free: [Function],
    close: [
        [Function],
        [Function: socketCloseListener]
    ],
    agentRemove: [Function],
    drain: [Function: ondrain],
    error: [Function: socketErrorListener],
    connect: {
        [Function: g] listener: [Function]
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM