利用OTP.NET框架来实现C#与Erlang Node之间的通讯

来源:互联网 发布:ubuntu core 是什么 编辑:程序博客网 时间:2024/06/07 00:46

OTP.NET库是Erlang中Jinterface的.NET实现,Jinterface是Erlang开发的用来实现与Java通讯的开源库,出了Jinterface 外,还开发了与C通讯的库。关于OTP.NET的代码可以从http://jungerl.cvs.sourceforge.net/viewvc/jungerl/jungerl/lib/otp.net/下载得到,由于OTP.NET是Java版本的.NET实现,所以文档跟Jinterface中的是类似的

 

下面的代码演示了利用OTP.NET来实现连接一个.NET节点与Erlang节点,并调用Erlang节点中的模块、方法,同时获取返回的结果。

 

首先,编写一个计算两个是乘积的erlamg模块:

-module(mathserver).

-compile(export_all).

 

multiply(First, Second) ->

First * Second.

 

 

然后利用下面的代码,尝试在erlang shell中,把这个模块作为一个节点上的服务,判断能否正确运行:

1、在控制台中输入werl.exe -sname servernode -setcookie cookie,来开启一个服务节点

2、在弹出的erlang shell窗口中输入c(mathserver)编译,成功的话将会得到{ok,mathserver}。

3、调用mathserver的函数mathserver:multiply(10, 3),得到正确的值。

 

在实现OTP.NET与这个Erlang 节点服务通讯之前,我们先用另外一个erlang节点来模拟客户端来调用mathserver,来验证节点之间的通讯是否正常:

1、在控制台中输入werl.exe -sname clientnode -setcookie cookie,开启一个客户端节点

2、在erlang shell中输入rpc:call(servernode@apollo, mathserver, multiply, [10, 2]).能够获取正确的返回值,说明节点间的通讯正常。

 

下面就是利用OTP.NET来实现调用mathserver服务,一下是C#代码:

static void Main(string[] args)

        {

 

            OtpSelf cNode = new OtpSelf("clientnode", "cookie");

            OtpPeer sNode = new OtpPeer("servernode@liyiqun");

            OtpConnection connection = cNode.connect(sNode);

 

            Otp.Erlang.Object[] parames = new Otp.Erlang.Object[] { new Otp.Erlang.Long(1), new Otp.Erlang.Long(4) };

            connection.sendRPC("mathserver", "multiply", parames);

 

            Otp.Erlang.Long sum = (Otp.Erlang.Long)connection.receiveRPC();

            Console.WriteLine("Return Value:" + sum.ToString());

 

            Console.ReadKey(true);

 

        }

 

运行C#代码,然后在控制台就能看到返回的正确结果,这里需要注意的是在erlang中的节点命名规则,在Windows中,@后面都是电脑名称,比如mathserver服务端的节点名称就是servernode@liyiqun。

原创粉丝点击