Example #1
0
function start (options) {

  options = options || {};
  options.timeout = 2;
  var c = clouds.createClient(options);

  c.on('listen', function () {
    console.log('listen');
    var add = c.bind('math.add');
    var minus = c.bind('math.minus');

    var results = [];

    function part (callback) {
      var t = Date.now();
      async.times(TIMES, function (i, next) {
        add(i, i, function (err, r) {
          if (!err) {
            assert.equal(r, i + i);
          }
          next(err);
        });
      }, function (err) {
        if (err) throw err;
        var s = Date.now() - t;
        results.push(s);
        console.log('call %s times, spent %sms', TIMES, s);
        callback();
      });
    }

    async.timesSeries(PARTS, function (i, next) {
      part(next);
    }, function (err) {
      if (err) throw err;
      c.exit();

      results.sort();
      results.shift();
      results.pop();
      var r = results.reduce(function (a, b) {
        return a + b;
      });
      r = r / results.length;
      console.log('call %s times, average %sms', TIMES, parseInt(r, 10));

      process.exit();
    });

  });

}
  it('test7 - 10000 calls', function (done) {
    var s1 = clouds.createServer({connection: connection.create()});
    var s2 = clouds.createServer({connection: connection.create()});
    var s3 = clouds.createServer({connection: connection.create()});
    var c = clouds.createClient({timeout: 20, connection: connection.create()});

    var MAX = 10000;
    var counter = {a: 0, b: 0, c: 0};
    var multi1 = c.bind('test7.multi.1', 1);

    async.series([
      function (next) {
        s1.register('test7.multi.1', function (v, callback) {
          callback(null, 'a');
        }, next);
      },
      function (next) {
        s2.register('test7.multi.1', function (v, callback) {
          callback(null, 'b');
        }, next);
      },
      function (next) {
        s3.register('test7.multi.1', function (v, callback) {
          callback(null, 'c');
        }, next);
      },
      function (next) {
        async.timesSeries(MAX, function (i, next) {
          multi1(i, function (err, n) {
            should.equal(err, null);
            counter[n]++;
            next();
          });
        }, next);
      }
    ], function (err) {
      console.log(err && err.stack);
      should.equal(err, null);
      (counter.a + counter.b + counter.c).should.equal(MAX);
      console.log(counter);
      s1.exit();
      s2.exit();
      s3.exit();
      c.exit();
      done();
    });
  });