`
dxm1986
  • 浏览: 435247 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

erlang talk to java

阅读更多

Erlang: Let’s talk to java

August 29th, 2007 :: jackyz

试了一下传说中的 JInterface ,使用 OtpErlang.jar 的整个过程其实非常简单,似乎比 JMS 的程序都简单。

首先,我们要用 java 实现的原始 erlang 程序如下,没错,就是巨简单的 echo ,我们的目标是要把它用 java 来改写,不仅写服务端,也要写客户端。

下载: echo_client.erl
  1. -module(echo_client).
  2.  
  3. -export([run/0]).
  4.  
  5. run() ->
  6.     Msg = "Hello Echo!",
  7.     {echoabc@merlin} ! {self()Msg},
  8.     io:format("send ~p ~n"[Msg]),
  9.     receive
  10.         Res ->
  11.             io:format("received ~p ~n"[Res])
  12.     end.
下载: echo_server.erl
  1. -module(echo_server).
  2.  
  3. -export([start/0]).
  4.  
  5. start() ->
  6.     register(echoself()),
  7.     io:format("echo start~n"[]),
  8.     loop().
  9.  
  10. loop() ->
  11.     receive
  12.         {PidMsg} ->
  13.             io:format("received ~p from ~p~n"[MsgPid]),
  14.             Pid ! Msg;
  15.         Any ->
  16.             io:format("received ~p ~n"[Any])
  17.     end,
  18.     loop().

写得并不严密,用了一堆硬编码,主要是个示例,就那么个意思,大家将就着看。

先说一下 JInterface 的一些基本概念。JInterface 的目的是:为 Java 提供一个包,使得 Java 程序在外部可以看起来就像一个标准的 Erlang Node 能以标准的 Erlang 方式与其他的节点进行通讯。它包装了 Erlang 节点之间分布式的通讯协议,编码解码,以及基本的 Erlang 操作,也就是 pid register send receive link unlink 等等,朴实无华。不过,作为两个语言之间的接口包,有了这些基本功能也就足够了。

根据 Erlang 的目录惯例, JInterface 的 Jar 在 ERLANG_HOME/lib/jinterface-x.x/priv 目录下,名字为 OtpErlang.jar 。注意,必须使用和你当前 Erlang 版本下的包,否则出了什么妖怪问题,别来问我,就算是问我,我也不知道该怎么办。:D 之前一直有一个误解,想当然的以为 JInterface 会用 JNI 什么的来实现,而自从碰过一次以后,对 JNI 这种“难以掌控”的东西总觉得有点畏难,所以,迟迟都没有动手,没想到,竟是纯 Java 实现的一个包。用起来方便,部署起来也漂亮。爽!

闲话休提,直接上代码得了。先是 Client 的代码。

  1. package com.test.erlang;
  2.  
  3. import java.io.IOException;
  4.  
  5. import com.ericsson.otp.erlang.*;
  6.  
  7. public class ErlangEchoClient {
  8.    
  9.     public static void main(String[] args) throws IOException {
  10.        
  11.         String v =System.getProperties().getProperty("OtpConnection.trace");
  12.         System.out.println("OtpConnection.trace="+v);
  13.        
  14.         OtpNode self = new OtpNode("bcd""123");
  15.        
  16.         System.out.println("node:"+self.node());
  17.         System.out.println("cookie:"+self.cookie());
  18.        
  19.         if (self.ping("abc"2000)) {
  20.             System.out.println("remote is up");
  21.         } else {
  22.             System.out.println("remote is not up");
  23.             return;
  24.         }
  25.        
  26.         String text = "Hi there";
  27.        
  28.         OtpMbox mbox = self.createMbox();
  29.        
  30.         OtpErlangObject[] msg = new OtpErlangObject[2];
  31.         msg[0] = mbox.self();
  32.         msg[1] = new OtpErlangString(text);
  33.         OtpErlangTuple tuple = new OtpErlangTuple(msg);
  34.  
  35.         mbox.send("echo""abc"tuple);
  36. padding-top: 0px !important; padding-right: 0px !important; padding-bottom: 0px !important; padding-left: 20px; display: list-item !important; font-size: 12px !important; line-height: 20px !important; border-left-width: 1px; border-left-style: solid; border-left-color: #c3ced9; border-top-width: 1px; border-top-style: solid; border-top-color: #e3eef9 !important; background-color: #f9fbfc !impo
    分享到:
    评论

相关推荐

    erlang-java聊天

    【Erlang与Java交互实现聊天程序】 在IT领域,Erlang和Java都是重要的编程语言,各有其独特的优点和应用场景。本项目“erlang-java聊天”是一个初级水平的示例,展示了如何利用这两种语言进行交互,实现一个简单的...

    erlang调用java

    `Erlang`和`Java`都是在各自领域有着独特优势的语言。`Erlang`以其强大的并发处理能力和容错性著称,而`Java`则有丰富的库支持和广泛的企业级应用。将两者结合,可以充分利用它们的优势。本文将详细探讨如何在`...

    java php python erlang 千万级内存数据性能比较

    本文将深入探讨Java、PHP、Python和Erlang这四种语言在处理千万级内存数据时的性能差异。 首先,让我们从Erlang开始。Erlang是一种并发性极强的函数式编程语言,特别适合构建分布式、容错系统。在提供的文件"erlang...

    Erlang-or-java.rar_erlang

    标题中的“Erlang-or-java.rar_erlang”表明这是一个关于Erlang和Java之间通信的示例项目。Erlang是一种面向并发、分布式、容错的编程语言,常用于构建高可用性和高并发性的系统,而Java则是一种广泛应用的通用编程...

    Erlang_to_C

    - **概念介绍**:Turbo Erlang是一种高效的Erlang实现方案,能够将Erlang程序编译成C语言代码,从而接近甚至达到C语言级别的性能。 - **实现原理**:通过高度优化的编译技术和运行时环境,Turbo Erlang能够显著提高...

    基于erlang后台,java swing前端开发的qq聊天系统

    本系统是基于erlang开发的后台,java swing开发的前端的qq聊天系统,希望能给初学erlang的人带来一点小小的帮助,具体操作步骤见redme.txt文件 功能如下: 功能: 1.用户登录功能,账号和密码从服务端的mysql数据库...

    <27>erlang record

    标题中的“&lt;27&gt;erlang record”可能指的是Erlang编程语言中的Record特性,它是一种数据结构,类似于结构体或者哈希表,用于组织和操作数据。在Erlang中,Record提供了一种方便的方式来定义和访问具有固定字段的数据...

    基于erlang的文件存储

    本项目“基于Erlang的文件存储”就是这样一个尝试,它利用Erlang强大的并发处理能力和分布式特性,为服务端提供稳定的基础架构,而客户端则通过Java的Swing组件提供用户友好的交互界面。以下是对该项目中涉及的技术...

    一个我自己学习Erlang的聊天室服务器及客户端代码

    本项目提供了一个使用Erlang编写的聊天室服务器端代码以及Java编写的客户端代码,这为我们深入理解Erlang的并发特性和Java与Erlang的交互提供了实践案例。 一、Erlang聊天室服务器端 1. 并发处理:Erlang的轻量级...

    erlang语言实现binary_to_term完整代码

    erlang提供了binary_to_term 函数,用于把二进制数据转为原始的erlang数据。这个函数都是c实现的,这里用erlang语言实现了,很有参考价值,其他语言可以参考这个解析erlang二进制协议数据。配套文章地址...

    程序员开发erlang的资料

    5. **Jinterface**:Jinterface是Erlang和Java之间的互操作库,它允许Erlang进程与Java虚拟机(JVM)中的对象进行通信。这对于既有Java基础又想利用Erlang优势的开发者来说,是一个强大的工具。 6. **Eclipse插件...

    erlang编程 Introducing Erlang

    **Erlang编程:Introducing Erlang** Erlang是一种函数式编程语言,由爱立信在1986年开发,主要用于构建高可用性、容错性和并发性的分布式系统。"Introducing Erlang"是Simon St. Laurent撰写的一本入门级教程,...

    c# 版ErlangOtp跨平台通信框架(Java版的转译)

    标题中的"C#版ErlangOtp跨平台通信框架(Java版的转译)"指的是一个用C#语言实现的框架,其目标是提供与Erlang OTP系统进行跨平台通信的能力。Erlang OTP(开放电信平台)是Erlang编程语言的一个核心组件,它包含了一...

    Erlang26-windows安装包

    OpenSSL 3 support in Erlang is considered to be mature and ready for production use. Erlang 26.1 and later versions supports FIPS mode on OpenSSL 3 3.12.13 3.12.12 3.12.11 3.12.10 25.0 26.2.x The ...

    可在ubuntu上安装erlang的deb包

    This package contains the Erlang/OTP runtime implementation, which is configured and built with HiPE support (allows compiling to native code), and minimal set of Erlang applications: compiler - ...

    erlang25.0 windows版本

    Erlang是一种高级编程语言,特别适用于并发、分布式和实时系统。它由Ericsson公司开发,主要用于构建高可用性、容错性和可扩展性的软实时系统。Erlang的25.0版本是该语言的一个更新,针对Windows操作系统进行了优化...

    erlang_版本24.3.4.4

    Erlang是一种面向并发的、函数式编程语言,由瑞典电信设备制造商Ericsson开发,主要用于构建高可用性、分布式和实时系统。版本24.3.4.4是Erlang的一个更新版本,包含了对先前版本的改进和修复。Erlang以其强大的错误...

    rabbitmq,erlang安装包

    确保选择合适的安装路径,并勾选"Add Erlang environment variables to your system",这样可以将Erlang环境变量添加到系统中,便于后续RabbitMQ的识别。 2. **验证Erlang安装**:安装完成后,打开命令行窗口,输入...

    Erlang/OTP 26.2.1

    Erlang/OTP 26.2.1,Erlang,OTP,26.2.1

    Erlang 20.3linux安装包

    echo 'export PATH=$PATH:/path/to/erlang/bin' &gt;&gt; ~/.bashrc source ~/.bashrc ``` 5. **验证安装**:最后,通过运行`erl`命令检查Erlang是否成功安装。 ```bash erl ``` 一旦Erlang安装成功,就可以继续...

Global site tag (gtag.js) - Google Analytics