Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Serialization-deserialization with Apache Thrift in nodejs

I am working on a Node.js application and I need to serialize and deserialize instances of the structs defined in an .thrift file, like the following:

 struct Notification {
   1: string subject,
   2: string message
 }

Now this is easy doable in Java, according to the tutorial at http://www.gettingcirrius.com/2011/03/rabbitmq-with-thrift-serialization.html :

    Notification notification = new Notification();
    TDeserializer deserializer = new TDeserializer();
    deserializer.deserialize(notification, serializedNotification);
    System.out.println("Received "+ notification.toString());

But I can't find how this is done using the nodejs library of Thrift. Can anyone help, please?

like image 429
Clara Avatar asked Nov 09 '12 15:11

Clara


1 Answers

Ok, after wasting a lot of time on research and trying different solutions, I finally came to the answer to my own question:

//SERIALIZATION:
var buffer = new Buffer(notification);
var transport = new thrift.TFramedTransport(buffer);
var binaryProt = new thrift.TBinaryProtocol(transport);
notification.write(binaryProt);

where notification is the object I wish to serialize. At this point, the byte array can be found in the transport.outBuffers field: var byteArray = transport.outBuffers;

For deserialization:

var tTransport = new thrift.TFramedTransport(byteArray);
var tProtocol = new thrift.TBinaryProtocol(tTransport);
var receivedNotif = new notification_type.Notification();
receivedNotif.read(tProtocol);

Assuming that the following lines have been added to the index.js file from the nodejs library for thrift:

exports.TFramedTransport = require('./transport').TFramedTransport;
exports.TBufferedTransport = require('./transport').TBufferedTransport;
exports.TBinaryProtocol = require('./protocol').TBinaryProtocol;
like image 87
Clara Avatar answered Oct 11 '22 23:10

Clara