interface protocols for erlang
Claes Wikstrom
klacke@REDACTED
Mon Dec 28 13:46:36 CET 1998
John Gibbons writes:
> Hi,
>
> I want to interface a Lisp system to Erlang and there appear to be two ways to do this. I can invent my own local protocol over TCP/IP for the specific task and implement that in both Erlang and Lisp, or I can use the existing Erlang approach as has been done with Java/Jive.
>
> I would prefer the latter but I can't seem to find any documentation of these protocols. Can someone point me to documentation on these protocols?
Well, first of all, the "jive protocol" merely consist of a way to
pack and unpack erlang data structures, nothing much of it.
As for exchanging arbitrary data structures back and forth between
two different systems, it is indeed possible to write an
marshalling interpreter the way they have done in jive.
There is (to my knowledge) no documentation on the jive internal
marshalling stuff, it's naive and the code is simple.
So I suggest you either invent your own protocol/pack/unpack
routines or make use of orber (The corba implementation) assuming
you have a Corba implementation in your lisp system ??
Take a look at the pack/1 routine in jive.erl and you'll
see that this is no big deal.
Furthermore, if speed is an issue, it's not very efficient to
have marshalling routines that interpret the way they have done
it in jive.
If marshalling is your main problem, maybe the erl_interface
libraries could be an option. Erlang has builtin support to
marshall and unmarshall erlang terms by means of the
two BIF's term_to_binary/1 and binary_to_term/1
1> X = {funky, stuff}.
{funky,stuff}
2> B = term_to_binary(X).
#Bin
3> binary_to_list(B).
[131,104,2,100,0,5,102,117,110,107,121,100,0,5,115,116,117,102,102]
4> binary_to_term(B).
{funky,stuff}
5>
The format produced by term_to_binary/1 can be read in (c-code)
by routines in the erl_interface lib. So if you can somehow
link erl_interface.a into your lisp system, you could send any erlang
term on the socket by means of
gen_tcp:send(Socket, term_to_binary(AnyTerm))
Docs and source of erl_interface is available at www.erlang.org
/klacke
More information about the erlang-questions
mailing list