JS Hessian 二进制Web Service协议:hessian.js

jopen 10年前

JS Hessian 二进制Web Service协议,支持JavaScript与Java通信。

Hessian Serialization 1.02.0 实现,纯JavaScript实现。支持Java中的所有类型。

Hessian是Caucho公司所定义的一个remoting on http的轻量级的remoting工具。基于自定义的binary的协议。起初只有Java的实现,而现在是4面开花,.Net,C++,Ruby,PHP的实现皆有出现.而且重要的一点是,所有client和server是互通的,也就是php可以call java的server。

支持类型

8 primitive types:

  1. raw binary data
  2. boolean
  3. 64-bit millisecond date
  4. 64-bit double
  5. 32-bit int
  6. 64-bit long
  7. null
  8. UTF8-encoded string

3 recursive types:

  1. list for lists and arrays
  2. map for maps and dictionaries
  3. object for objects

one special contruct:

  1. ref for shared and circular object references

Hessian 2.0 has 3 internal reference maps:

  • An object/list reference map.
  • An class definition reference map.
  • A type (class name) reference map.

Encoder

Simple javascript type

var hessian = require('hessian.js');  var encoder = new hessian.Encoder();    encoder.write(1); // int  encoder.write(1.1); // double  encoder.write(1e100); // double  encoder.write(Math.pow(2, 18)); // long  encoder.write(true); // boolean  encoder.write(null); // null  encoder.write('test'); // string    // java base types  encoder.write(hessian.java.long(3001010320)); // 3001010320L  encoder.write(hessian.java.double(100)); // double  encoder.write(hessian.java.intList([0, 1, 2])); // int[] = {0, 1, 2}    var object = {};  object.prop1 = [1, 2, 3];  object.prop2 = 'string';  object.prop3 = {key: 'value'};  object.prop4 = object;  // circular  encoder.write(object); // object

Complex java type

var hessian = require('hessian.js');  var encoder = new hessian.Encoder();    var long = {    $class: 'java.lang.Long',    $: 1  }  encoder.write(long); // long type    var testObject = {    $class: 'com.hessian.TestObject',    $: {      a: 1,      b: 'test',      c: {$class: 'java.lang.Long', $: 123}    }  };  encoder.write(testObject);

Decoder

var hessian = require('hessian.js');  var decoder = new hessian.Decoder(buf);    decoder.read(); //return what it is  decoder.readNull();  decoder.readBool();  decoder.readInt();  decoder.readLong();  decoder.readDouble();  decoder.readDate();  decoder.readObect();  decoder.readMap();  decoder.readArray();  decoder.readList();  decoder.readRef();

Simple Usage

hessian 1.0:

var hessian = require('hessian.js');    var testObject = {    a: 1,    b: 'string',    c: true,    d: 1.1,    e: Math.pow(2, 40),    f: [1, 2, 3, '4', true, 5],    g: {a: 1, b: true, c: 'string'}  };    var buf;  try {    buf = hessian.encode(testObject);  } catch (err) {    console.log('encode error: ', err.message);    process.exit(1);  }    try {    var res = hessian.decode(buf);    // res.should.eql(testObject);  } catch (err) {    console.log('decode error: ', err.message);  }

hessian 2.0:

var hessian = require('hessian.js');    var testObject = {    a: 1,    b: 'string',    c: true,    d: 1.1,    e: Math.pow(2, 40),    f: [1, 2, 3, '4', true, 5],    g: {a: 1, b: true, c: 'string'}  };    var buf;  try {    buf = hessian.encode(testObject, '2.0');  } catch (err) {    console.log('encode error: ', err.message);    process.exit(1);  }    try {    var res = hessian.decode(buf, '2.0');    // res.should.eql(testObject);  } catch (err) {    console.log('decode error: ', err.message);  }

项目主页:http://www.open-open.com/lib/view/home/1392381518569