Skip to content

Commit

Permalink
Merge d240b59 into 16c5025
Browse files Browse the repository at this point in the history
  • Loading branch information
baadc0de committed Jul 25, 2018
2 parents 16c5025 + d240b59 commit aef0952
Show file tree
Hide file tree
Showing 6 changed files with 79 additions and 19 deletions.
33 changes: 17 additions & 16 deletions benchmark/suites/serializers.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,33 +2,20 @@
"use strict";

const ServiceBroker = require("../../src/service-broker");
const FakeTransporter = require("../../src/transporters/fake");
const Context = require("../../src/context");
const Serializers = require("../../src/serializers");
const P = require("../../src/packets");
const crypto = require("crypto");

const { getDataFile } = require("../utils");

const Benchmarkify = require("benchmarkify");
const benchmark = new Benchmarkify("Serializers benchmark").printHeader();

let dataFiles = ["10", "150", "1k", "10k", "50k", "100k", "1M"];

function createBrokers(Serializer, opts) {
const broker = new ServiceBroker({
logger: false,
nodeID: "node-1",
transporter: new FakeTransporter(),
serializer: new Serializer(opts)
});

return broker;
}
let dataFiles = ["10", "1k", "50k", "100k", "buf-10240", "buf-102400"];

function runTest(dataName) {

let data = getDataFile(dataName + ".json");
let payload = JSON.parse(data);
let payload = !dataName.startsWith("buf-") ? JSON.parse(getDataFile(dataName + ".json")) : crypto.randomBytes(parseInt(dataName.substr(4)));

const broker = new ServiceBroker({ logger: false });

Expand All @@ -37,12 +24,14 @@ function runTest(dataName) {
let MsgPackSer = new Serializers.MsgPack();
let protoBufSer = new Serializers.ProtoBuf();
let thriftSer = new Serializers.Thrift();
let notepackSer = new Serializers.Notepack();

JsonSer.init(broker);
AvroSer.init(broker);
MsgPackSer.init(broker);
protoBufSer.init(broker);
thriftSer.init(broker);
notepackSer.init(broker);

let bench1 = benchmark.createSuite(`Serialize packet with ${dataName}bytes`);

Expand Down Expand Up @@ -133,11 +122,23 @@ function runTest(dataName) {
return thriftSer.serialize(packet.payload, packet.type);
});

bench1.add("Notepack", () => {
const packet = new P.Packet(P.PACKET_EVENT, "node-101", {
ver:"3",
sender: "node-100",
event: "user.created",
data: payload,
broadcast: true
});
return notepackSer.serialize(packet.payload, packet.type);
});

console.log("JSON length:", JsonSer.serialize(packet.payload, packet.type).length);
console.log("Avro length:", AvroSer.serialize(packet.payload, packet.type).length);
console.log("MsgPack length:", MsgPackSer.serialize(packet.payload, packet.type).length);
console.log("ProtoBuf length:", protoBufSer.serialize(packet.payload, packet.type).length);
console.log("Thrift length:", thriftSer.serialize(packet.payload, packet.type).length);
console.log("Notepack length:", notepackSer.serialize(packet.payload, packet.type).length);

return bench1.run()
.then(() => {
Expand Down
5 changes: 5 additions & 0 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@
"license": "MIT",
"devDependencies": {
"@types/node": "10.5.2",
"notepack.io": "^2.1.3",
"amqplib": "0.5.2",
"avsc": "5.4.1",
"benchmarkify": "2.1.0",
Expand Down
3 changes: 2 additions & 1 deletion src/serializers/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,8 @@ const Serializers = {
Avro: require("./avro"),
MsgPack: require("./msgpack"),
ProtoBuf: require("./protobuf"),
Thrift: require("./thrift")
Thrift: require("./thrift"),
Notepack: require("./notepack")
};

function getByName(name) {
Expand Down
52 changes: 52 additions & 0 deletions src/serializers/notepack.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
"use strict";

const BaseSerializer = require("./base");
/**
* JSON serializer for Moleculer
*
* @class JSONSerializer
*/
class NotepackSerializer extends BaseSerializer {
/**
* Creates an instance of JSONSerializer.
*
* @memberof NotepackSerializer
*/
constructor() {
super();
try {
this.codec = require("notepack.io");
} catch(err) {
/* istanbul ignore next */
this.broker.fatal("The 'notepack.io' package is missing! Please install it with 'npm install notepack.io --save' command!", err, true);
}
}

/**
* Serializer a JS object to Buffer
*
* @param {Object} obj
* @param {String} type of packet
* @returns {Buffer}
*
* @memberof Serializer
*/
serialize(obj) {
return this.codec.encode(obj);
}

/**
* Deserialize Buffer to JS object
*
* @param {Buffer} buf
* @param {String} type of packet
* @returns {Object}
*
* @memberof Serializer
*/
deserialize(buf) {
return this.codec.decode(buf);
}
}

module.exports = NotepackSerializer;
4 changes: 2 additions & 2 deletions src/transporters/base.js
Original file line number Diff line number Diff line change
Expand Up @@ -118,8 +118,8 @@ class BaseTransporter {
const packet = this.deserialize(cmd, msg);
return this.messageHandler(cmd, packet);
} catch(err) {
this.logger.warn("Invalid incoming packet. Type:", cmd);
this.logger.debug("Content:", msg.toString);
this.logger.warn("Invalid incoming packet. Type:", cmd, err);
this.logger.debug("Content:", msg.toString ? msg.toString() : msg);
}
}

Expand Down

0 comments on commit aef0952

Please sign in to comment.