如何手动打开套接字并将其与http.request一起使用

时间:2016-05-19 15:38:37

标签: node.js sockets express mocha

我正在为节点项目编写一些集成测试。

我们需要获得有关服务器性能的可靠指标。为此,我们希望在任何测试性能之前在服务器和客户端之间打开一个套接字,这样,我们就可以消除在客户端和服务器之间创建套接字所需的时间。

我创建了一个像这样的小测试用例:

'use strict';

var express = require( 'express' ),
    net     = require('net'),
    http    = require('http');

var host    = 'localhost',
    port    = 8000;

describe( 'dummy describe', function() {
  var app, server, agent, opts;
  before( function( done ) {
    app = express();
    app.get( '/', function( req, res, next ) {
      res.send( 'stuff' );
    });
    server = http.createServer( app );
    server.listen( 8000 );
    agent = new http.Agent({ maxSockets: 1 });
    agent.createConnection({ port: port, host: host }, function() {
      return net.createConnection({ port: port, host: host }, function() {
        console.log( 'Socket fd open on before block: ' + this._handle.fd );
        done();
      });
    });
    opts = {
      hostname: host,
      port: port,
      path: '/',
      agent: agent,
      method: 'GET',
    };
  });
  it( 'dummy test', function ( done ) {
    var req = http.request( opts, function( res ) {
      console.log( 'Socket fd used on GET: ' + res.socket._handle.fd );
      done();
    });
    req.end();
  });
}); 

在这里,我可以看到before块的执行,其中我console.log是套接字文件描述符。

阅读节点文档,我发现他是将套接字传递给代理的正确方法。但它不起作用,它输出不同的插座。

我尝试了数千种组合,但没有运气。

我想手动连接到套接字,然后使用它来执行http.request而无需重新打开另一个套接字。

这样做的正确方法是什么?

0 个答案:

没有答案