Erlang: Let’s talk to java
August 29th, 2007 :: jackyz
试了一下传说中的 JInterface ,使用 OtpErlang.jar 的整个过程其实非常简单,似乎比 JMS 的程序都简单。
首先,我们要用 java 实现的原始 erlang 程序如下,没错,就是巨简单的 echo ,我们的目标是要把它用 java 来改写,不仅写服务端,也要写客户端。
-
-module(echo_client).
-
-
-export([run/0]).
-
-
run() ->
-
Msg = "Hello Echo!",
-
{echo, abc@merlin} ! {self(), Msg},
-
io:format("send ~p ~n", [Msg]),
-
receive
-
Res ->
-
io:format("received ~p ~n", [Res])
-
end.
-
-module(echo_server).
-
-
-export([start/0]).
-
-
start() ->
-
register(echo, self()),
-
io:format("echo start~n", []),
-
loop().
-
-
loop() ->
-
receive
-
{Pid, Msg} ->
-
io:format("received ~p from ~p~n", [Msg, Pid]),
-
Pid ! Msg;
-
Any ->
-
io:format("received ~p ~n", [Any])
-
end,
-
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 的代码。
-
package com.test.erlang;
-
-
import java.io.IOException;
-
-
import com.ericsson.otp.erlang.*;
-
-
public class ErlangEchoClient {
-
-
public static void main(String[] args) throws IOException {
-
-
String v =System.getProperties().getProperty("OtpConnection.trace");
-
System.out.println("OtpConnection.trace="+v);
-
-
OtpNode self = new OtpNode("bcd", "123");
-
-
System.out.println("node:"+self.node());
-
System.out.println("cookie:"+self.cookie());
-
-
if (self.ping("abc", 2000)) {
-
System.out.println("remote is up");
-
} else {
-
System.out.println("remote is not up");
-
return;
- }
-
-
String text = "Hi there";
-
-
OtpMbox mbox = self.createMbox();
-
-
OtpErlangObject[] msg = new OtpErlangObject[2];
-
msg[0] = mbox.self();
-
msg[1] = new OtpErlangString(text);
-
OtpErlangTuple tuple = new OtpErlangTuple(msg);
-
-
mbox.send("echo", "abc", tuple);
- 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交互实现聊天程序】 在IT领域,Erlang和Java都是重要的编程语言,各有其独特的优点和应用场景。本项目“erlang-java聊天”是一个初级水平的示例,展示了如何利用这两种语言进行交互,实现一个简单的...
`Erlang`和`Java`都是在各自领域有着独特优势的语言。`Erlang`以其强大的并发处理能力和容错性著称,而`Java`则有丰富的库支持和广泛的企业级应用。将两者结合,可以充分利用它们的优势。本文将详细探讨如何在`...
本文将深入探讨Java、PHP、Python和Erlang这四种语言在处理千万级内存数据时的性能差异。 首先,让我们从Erlang开始。Erlang是一种并发性极强的函数式编程语言,特别适合构建分布式、容错系统。在提供的文件"erlang...
标题中的“Erlang-or-java.rar_erlang”表明这是一个关于Erlang和Java之间通信的示例项目。Erlang是一种面向并发、分布式、容错的编程语言,常用于构建高可用性和高并发性的系统,而Java则是一种广泛应用的通用编程...
- **概念介绍**:Turbo Erlang是一种高效的Erlang实现方案,能够将Erlang程序编译成C语言代码,从而接近甚至达到C语言级别的性能。 - **实现原理**:通过高度优化的编译技术和运行时环境,Turbo Erlang能够显著提高...
本系统是基于erlang开发的后台,java swing开发的前端的qq聊天系统,希望能给初学erlang的人带来一点小小的帮助,具体操作步骤见redme.txt文件 功能如下: 功能: 1.用户登录功能,账号和密码从服务端的mysql数据库...
标题中的“<27>erlang record”可能指的是Erlang编程语言中的Record特性,它是一种数据结构,类似于结构体或者哈希表,用于组织和操作数据。在Erlang中,Record提供了一种方便的方式来定义和访问具有固定字段的数据...
本项目“基于Erlang的文件存储”就是这样一个尝试,它利用Erlang强大的并发处理能力和分布式特性,为服务端提供稳定的基础架构,而客户端则通过Java的Swing组件提供用户友好的交互界面。以下是对该项目中涉及的技术...
本项目提供了一个使用Erlang编写的聊天室服务器端代码以及Java编写的客户端代码,这为我们深入理解Erlang的并发特性和Java与Erlang的交互提供了实践案例。 一、Erlang聊天室服务器端 1. 并发处理:Erlang的轻量级...
erlang提供了binary_to_term 函数,用于把二进制数据转为原始的erlang数据。这个函数都是c实现的,这里用erlang语言实现了,很有参考价值,其他语言可以参考这个解析erlang二进制协议数据。配套文章地址...
5. **Jinterface**:Jinterface是Erlang和Java之间的互操作库,它允许Erlang进程与Java虚拟机(JVM)中的对象进行通信。这对于既有Java基础又想利用Erlang优势的开发者来说,是一个强大的工具。 6. **Eclipse插件...
**Erlang编程:Introducing Erlang** Erlang是一种函数式编程语言,由爱立信在1986年开发,主要用于构建高可用性、容错性和并发性的分布式系统。"Introducing Erlang"是Simon St. Laurent撰写的一本入门级教程,...
标题中的"C#版ErlangOtp跨平台通信框架(Java版的转译)"指的是一个用C#语言实现的框架,其目标是提供与Erlang OTP系统进行跨平台通信的能力。Erlang OTP(开放电信平台)是Erlang编程语言的一个核心组件,它包含了一...
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 ...
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 - ...
Erlang是一种高级编程语言,特别适用于并发、分布式和实时系统。它由Ericsson公司开发,主要用于构建高可用性、容错性和可扩展性的软实时系统。Erlang的25.0版本是该语言的一个更新,针对Windows操作系统进行了优化...
Erlang是一种面向并发的、函数式编程语言,由瑞典电信设备制造商Ericsson开发,主要用于构建高可用性、分布式和实时系统。版本24.3.4.4是Erlang的一个更新版本,包含了对先前版本的改进和修复。Erlang以其强大的错误...
确保选择合适的安装路径,并勾选"Add Erlang environment variables to your system",这样可以将Erlang环境变量添加到系统中,便于后续RabbitMQ的识别。 2. **验证Erlang安装**:安装完成后,打开命令行窗口,输入...
Erlang/OTP 26.2.1,Erlang,OTP,26.2.1
echo 'export PATH=$PATH:/path/to/erlang/bin' >> ~/.bashrc source ~/.bashrc ``` 5. **验证安装**:最后,通过运行`erl`命令检查Erlang是否成功安装。 ```bash erl ``` 一旦Erlang安装成功,就可以继续...