-
Notifications
You must be signed in to change notification settings - Fork 15
/
Copy pathREADME
147 lines (107 loc) · 4.05 KB
/
README
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
bertrpc.js
This is a BERT-RPC server and client library for
node.js <http://nodejs.org/>, the V8 based evented
IO framework.
BERT-RPC is a schemaless binary remote procedure call
protocol by Tom Preston-Werner, based on the BERT
(Binary ERlang Term) serialization format.
See <http://bert-rpc.org/> for more information about
BERT and BERT-RPC, including additional language
implementations.
The bert.js library was taken from Rusty Klophaus's
BERT-JS project: <http://github.com/rklophaus/BERT-JS>
but has been modified quite a bit at this point.
STATUS
This package is lightly maintained in hopes somebody finds it useful.
INSTALL
node.js must be installed and available on your PATH
before continuing. It's trivial:
cd /tmp
curl -L http://bit.ly/nodejs | tar xvzf -
cd node-*
./configure PREFIX=/usr/local
make && sudo make install
EXAMPLES
Once you have node installed, grab a clone of the
node-bertrpc git repo
$ git clone git://github.com/znull/node-bertrpc
$ cd node-bertrpc
$ node examples/helloworld.js
<-- exposing: say [funs: hello, echo]
Leave that there and then run the example client in a
separate shell:
$ node examples/helloclient.js
You should see something like the following output from
the server:
--> connect
--> 30: {call, say, hello, []}
<-- 21: {reply, <<"hello">>}
--> 45: {call, say, echo, [<<"Hello World">>]}
<-- 33: {reply, [<<"Hello World">>]}
--> 85: {call, say, echo, [[{foo, <<"bar">>}, {bar, <<"baz">>}], 21]}
<-- 73: {reply, [[{foo, <<"bar">>}, {bar, <<"baz">>}], 21]}
--> eof
<-- close
Connect with the Ruby BERT-RPC client (or any other
BERT-RPC client) to play at a REPL:
$ sudo gem install bertrpc -s http://gemcutter.org/
$ irb -rubygems -rbertrpc
>> service = BERTRPC::Service.new('localhost', 7000)
>> service.call.say.echo('hello', 'world', { 'foo' => %w[bar baz bizle] })
=> ["hello", "world", {:foo=>["bar", "baz", "bizzle"]}]
BERT-RPC SERVERS
Require the "bertrpc" lib and expose objects:
var rpc = require('bertrpc');
rpc.expose('hello', {
add: function (a, b) {
return a + b;
},
subtract: function (a, b) {
return a - b;
}
});
rpc.listen(7001, 'localhost');
Start the node server by running your script directly:
node yourstuff.js
That exposes a BERT-RPC module named "hello" with two
remotely callable functions: "add" and "subtract" but you
can pass any object to expose to make all of its functions
available.
BERT-RPC CLIENTS
The BERT-RPC client library is still very experimental and
likely to change significantly:
var sys = require('sys'),
rpc = require('bertrpc');
rpc.connect(7001, 'localhost', function (service) {
sys.puts("client calling the add fun in the hello module");
service.call('hello', 'add', [1, 2], function (result) {
sys.puts("client received response: " + sys.inspect(result));
// do something useful
});
});
BERT ENCODING / DECODING
The bert.js library includes functions for encoding,
decoding, and getting a formatting string representation of
BERT objects.
Get in a REPL:
$ NODE_PATH=./src node-repl
Welcome to the Node.js REPL.
Enter ECMAScript at the prompt.
node> bert = require('bert');
bert.encode serializes an object graph as a BERT:
node> holabert = bert.encode('hello')
"\u0083m\u0000\u0000\u0000\u0005hello"
node> sys.puts(bert.bin_repr(holabert))
<<131,109,0,0,0,5,104,101,108,108,111>>
bert.decode deserializes a BERT, creating an object graph:
node> bert.decode("\u0083m\u0000\u0000\u0000\u0005hello")
"hello"
DEVELOPMENT
The tests have been converted to use `nodeunit`. Make sure it is installed
and available in your path, then run `nodeunit test/test_*` to execute the
tests.
SEE ALSO
CODE: git clone git://github.com/znull/node-bertrpc.git
HOME: http://github.com/znull/node-bertrpc/
BUGS: http://github.com/znull/node-bertrpc/issues
COPY: See the file COPYING (it's MIT)