diff options
author | Matteo Collina <hello@matteocollina.com> | 2016-01-29 14:18:27 +0100 |
---|---|---|
committer | Matteo Collina <hello@matteocollina.com> | 2016-01-29 19:26:44 +0100 |
commit | 137f53c7b72ff9cb36694d058136344076661f4a (patch) | |
tree | b5dd2bad2463b37ff541726ad1f272e21920f212 /benchmark/dgram/offset-length.js | |
parent | 4126441013bb569c19417f4a23c5f6b3bc38ef2b (diff) | |
download | node-new-137f53c7b72ff9cb36694d058136344076661f4a.tar.gz |
dgram: support dgram.send with multiple buffers
Added ability to dgram.send to send multiple buffers, _writev style.
The offset and length parameters in dgram.send are now optional.
Refactored the dgram benchmarks, and seperated them from net.
Added docs for the new signature.
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Saúl Ibarra Corretgé <saghul@gmail.com>
Fixes: https://github.com/nodejs/node/issues/4302
PR-URL: https://github.com/nodejs/node/pull/4374
Diffstat (limited to 'benchmark/dgram/offset-length.js')
-rw-r--r-- | benchmark/dgram/offset-length.js | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/benchmark/dgram/offset-length.js b/benchmark/dgram/offset-length.js new file mode 100644 index 0000000000..4c3b11b58e --- /dev/null +++ b/benchmark/dgram/offset-length.js @@ -0,0 +1,62 @@ +// test UDP send/recv throughput with the "old" offset/length API +'use strict'; + +const common = require('../common.js'); +const PORT = common.PORT; + +// `num` is the number of send requests to queue up each time. +// Keep it reasonably high (>10) otherwise you're benchmarking the speed of +// event loop cycles more than anything else. +var bench = common.createBenchmark(main, { + len: [1, 64, 256, 1024], + num: [100], + type: ['send', 'recv'], + dur: [5] +}); + +var dur; +var len; +var num; +var type; +var chunk; +var encoding; + +function main(conf) { + dur = +conf.dur; + len = +conf.len; + num = +conf.num; + type = conf.type; + chunk = new Buffer(len); + server(); +} + +var dgram = require('dgram'); + +function server() { + var sent = 0; + var received = 0; + var socket = dgram.createSocket('udp4'); + + function onsend() { + if (sent++ % num == 0) + for (var i = 0; i < num; i++) + socket.send(chunk, 0, chunk.length, PORT, '127.0.0.1', onsend); + } + + socket.on('listening', function() { + bench.start(); + onsend(); + + setTimeout(function() { + var bytes = (type === 'send' ? sent : received) * chunk.length; + var gbits = (bytes * 8) / (1024 * 1024 * 1024); + bench.end(gbits); + }, dur * 1000); + }); + + socket.on('message', function(buf, rinfo) { + received++; + }); + + socket.bind(PORT); +} |