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

C# 同时被 2 个专栏收录
7 篇文章 0 订阅
10 篇文章 0 订阅

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。

  • 0
    点赞
  • 2
    评论
  • 1
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页

打赏作者

minyskirt

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值