EPMD replacement in Go
To start daemon run:
$ eclus [-port 4369] [-nodes-limit 1000] [-unreg-ttl 10]Flags:
-port: listening port for daemon, default is 4369-nodes-limit: capacity size of nodes register, default is 1000-unreg-ttl: time to live of inactive (down) nodes if register capacity exceed, default is 10
If eclus cannot bind to specified port, it runs in CLI mode.
To check registered names on epmd, run eclus with flag -names:
$ eclus -names
asd 50249 7 active 1 Sun Dec 30 03:40:47 2012
gangnam 40937 none down 2 Sun Dec 30 03:44:51 2012
oppa 36677 9 active 2 Sun Dec 30 03:44:48 2012
qwe 60255 none down 1 Sun Dec 30 03:44:25 2012Header is: | Node name | Port of node | File descriptor of node connection | Node state | Creation counter | Recent state change date |
Run eclus with embedded node:
$ eclus -node -node-name 'epmd@localhost' -node-cookie 123asd [-erlang.node.trace] [-erlang.dist.trace]Options -erlang.node.trace, -erlang.dist.trace will print debug info for correspond subsystems.
Then run Erlang node with the same cookie:
$ erl -sname asd@localhost -setcookie 123asdNow type net_adm:ping(epmd@localhost). in Erlang node:
(asd@localhost)1> net_adm:ping(epmd@localhost).
pongYou see pong reply from Go-node!
See src/eclus/esrv.go. It is GenServer behaviour implementation which you can use like original gen_server process from Erlang/OTP.
To run this process first create pointer to structure which implements all methods for this behaviour:
eSrv := new(eclusSrv)Then call Spawn method on published node:
enode.Spawn(eSrv)Now you can interact with this process from Erlang-node using gen_server:call/2, gen_server:cast/2` or just send message to it:
(asd@localhost)3> gen_server:call({eclus, epmd@localhost}, message).
{ok,eclus_reply,message}