JS Hessian 二進制Web Service協議,支持JavaScript與Java通信。
Hessian Serialization 1.0 和 2.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:
- raw binary data
- boolean
- 64-bit millisecond date
- 64-bit double
- 32-bit int
- 64-bit long
- null
- UTF8-encoded string
3 recursive types:
list
for lists and arrays
map
for maps and dictionaries
object
for objects
one special contruct:
- 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.baiduhome.net/lib/view/home/1392381518569