`
Kingson_Wu
  • 浏览: 119501 次
文章分类
社区版块
存档分类
最新评论

Hessian跨语言调用实例

 
阅读更多

Hessian是跨语言基于HTTP的RPC框架,传输的数据格式是二机制。网上找了很多例子,基本上都是同语言之间的RPC调用例子,基本没有跨语言的,自己折腾一下,使用Java编写PRC服务端,使用Java和Python作为客户端调用RPC服务。

Java版的Hessian例子可以参考这个http://www.voidcn.com/blog/qw765811529/article/p-4530324.html

Java 服务端代码:

package app.demo;
import java.io.Serializable;

public class User implements Serializable {

    private static final long serialVersionUID = 153519254199840035L;

    String userName = "snoopy";
    String password = "showme";

    public User(String user, String pwd) {
        this.userName = user;
        this.password = pwd;
    }

    public String getUserName() {
        return userName;
    }

    public String getPassword() {
        return password;
    }
}

package app.demo;

public interface BasicAPI {

    public void setGreeting(String greeting);

    public String hello();

    public User getUser();
}

package app.demo;

public class BasicService implements BasicAPI {

    private String _greeting = "Hello, world";

    public void setGreeting(String greeting) {
        _greeting = greeting;
        System.out.println("set greeting success:" + _greeting);
    }

    public String hello() {
        return _greeting;
    }

    public User getUser() {
        return new User("prance", "meshow");
    }
}

Java 客户端代码:
(因为Hessian是跨语言的,所以客户端调用数据返回时,转化成对象并不要求包名,类名一致。当然一般情况下服务端开发的同学会提供客户端调用的同学sdk,sdk里数据返回的类跟服务端是一致的,这里只是为了测试)

public class User2 implements Serializable {

    private static final long serialVersionUID = 153519254199830056L;

    String userName = "snoopy";
    String password = "showme";

    public User2(String user, String pwd) {
        this.userName = user;
        this.password = pwd;
    }

    public String getUserName() {
        return userName;
    }

    public String getPassword() {
        return password;
    }
}

public interface BasicAPI2 {

    public void setGreeting(String greeting);

    public String hello();

    public User2 getUser();
}

import app.demo2.BasicAPI2;
import com.caucho.hessian.client.HessianProxyFactory;

public class BasicClient {
    public static void main(String[] args) throws Exception {
        //String url = "http://127.0.0.1:8080/Hessian/hello";
        String url = "http://localhost:8080/EasyHessian/hello";
        HessianProxyFactory factory = new HessianProxyFactory();
        //BasicAPI basic = (BasicAPI) factory.create(BasicAPI.class, url);
        BasicAPI2 basic = (BasicAPI2) factory.create(BasicAPI2.class, url);
        System.out.println("Hello:" + basic.hello());
        System.out.println("Hello:" + basic.getUser());
        System.out.println("Hello:" + basic.getUser().getUserName());
        System.out.println("Hello:" + basic.getUser().getPassword());
        basic.setGreeting("HelloGreeting");
        System.out.println("Hello:" + basic.hello());
    }
}

详细完整源码:https://github.com/Kingson4Wu/Frieza-revenge/tree/master/RPC-framework/src/main/java/app/demo

Python客户端代码:

#!python
# encoding: utf-8

'''
使用Python语言实现远程调用
使用Python客户端来进行远程调用,我们可以从https://github.com/bgilmore/mustaine下载,然后安装Hessian的代理客户端Python实现库:
git clone https://github.com/bgilmore/mustaine.git
cd mustaine
sudo python setup.py install

http://san-yun.iteye.com/blog/1628405
http://pydoc.net/Python/mustaine/0.1.7/mustaine.parser/

https://github.com/Kingson4Wu/Frieza-revenge/blob/master/RPC-framework%2Fsrc%2Fmain%2Fjava%2Fapp%2Fdemo%2FBasicService.java

'''


from mustaine.client import HessianProxy
test = HessianProxy("http://localhost:8080/EasyHessian/hello")
print test._headers
print test.hello()
print test.getUser()
print test.getUser().userName
user = test.getUser()
print user.password
test.setGreeting("Hessian Python")
print test.hello()
<script type="text/javascript"> $(function () { $('pre.prettyprint code').each(function () { var lines = $(this).text().split('\n').length; var $numbering = $('<ul/>').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i <= lines; i++) { $numbering.append($('<li/>').text(i)); }; $numbering.fadeIn(1700); }); }); </script>
分享到:
评论

相关推荐

    利用hessian进行系统通信实例教程

    Hessian是一种二进制的RPC(远程过程调用)协议,它提供了高效的、跨语言的、远程方法调用能力。本教程将通过结合Spring框架,深入讲解如何利用Hessian进行系统通信,非常适合初学者快速上手。 一、Hessian简介 ...

    基于spring+hessian框架的webservice实例

    Hessian支持多种语言,包括Java、C++、Python等,使得跨语言的交互成为可能。 在"基于spring+hessian框架的webservice实例"中,我们将看到如何结合Spring和Hessian来创建和消费Web服务。首先,我们需要创建一个服务...

    flex-hessian-java实例.rar

    Flex-Hessian-Java实例是一个关于使用Flex客户端与Java服务器之间进行高效远程调用的实践案例。这个压缩包包含了实现这一技术所需的关键组件和文件。Flex是Adobe开发的一种开放源码的富互联网应用(RIA)开发框架,...

    hessian php与java通讯demo源码

    在实际项目中,使用Hessian协议可以使跨语言通信更加便捷高效。需要注意的是,虽然Hessian简化了跨平台交互,但安全性、错误处理和日志记录等方面仍需要开发者仔细考虑和实现。 总之,这个"PHP与Java通信Demo源码...

    hessian包及一个简单的使用实例

    2. **类型安全**:Hessian支持各种数据类型,包括基本类型、对象、数组和映射,保证了跨语言、跨平台的数据交换的安全性。 3. **简单API**:Hessian提供简洁的API,开发者可以快速地在服务端和客户端之间建立连接并...

    hessian简单实例

    - **跨语言支持**:Hessian不仅支持Java,还支持其他语言如C++,Python等,这使得多语言间的通信变得简单。 - **动态类型**:Hessian可以处理动态类型,无需预先定义复杂的接口或者数据结构。 - **透明性**:对于...

    外部接口调用 使用spring4+hessian4实例(二)

    Hessian支持多种语言,包括Java、C++、Python等,这使得跨平台的通信变得简单。 在实例中,我们将创建一个服务提供者(Server)和一个服务消费者(Client)。服务提供者会暴露一个接口,这个接口通过Hessian协议...

    hessian学习实例

    Hessian是一种轻量级的RPC(远程过程调用)协议,它由Caucho公司开发,主要用于实现Java和Java之间,以及Java和其他语言之间的高效、跨平台的远程通信。Hessian提供了一种二进制的序列化格式,使得在网络上传输的...

    hessian示例远程轻量级传输

    3. **跨语言支持**:虽然起源于Java,但Hessian也提供了对其他语言如C++、Python等的支持,便于构建多语言环境下的分布式系统。 4. **透明性**:Hessian允许远程调用像本地方法调用一样,提高了开发者的生产力。 ##...

    hessian

    4. **跨语言支持**:虽然最初是为Java设计的,但Hessian也有其他语言的实现,比如Python、C++、C#等,因此可以在多种语言之间进行通信。 在【描述】中提到的博客链接,可能详细介绍了如何使用Hessian进行客户端和...

    hessian-example

    Hessian是由Caucho Technology开发的,它的目标是提供一种轻量级、高效的通信方式,特别是在Java和.NET之间进行跨语言交互时。下面我们将深入探讨Hessian的工作原理、优势以及如何在实际项目中应用。 Hessian的核心...

    hessian框架应用,实现远程调用,分布式开发

    2. **自动类型映射**:Hessian能够自动处理Java和目标语言之间的类型转换,使得跨语言通信变得简单。 3. **序列化与反序列化**:Hessian可以将Java对象序列化为二进制流,然后在网络上传输,到达目的地后再反序列...

    hessian小实例

    4. **跨语言支持**:虽然最初是为Java和.NET设计的,但现在有多种语言的实现,如Python、Ruby等。 二、Hessian服务端实现 在“hessianServer”这个文件中,我们通常会看到如何创建一个Hessian服务端。服务端的核心...

    Hessian的学习笔记

    * 跨语言支持:Hessian支持多种编程语言,例如Java、Python、C#等。 * 可扩展性:Hessian具有高可扩展性,易于集成到现有的应用程序中。 五、Hessian的应用场景 Hessian可以应用于以下场景: * 远程过程调用(RPC...

    使用hessian进行服务器-客户端通讯

    Hessian协议处理了类型转换和网络编码,使得跨平台通信变得简单,支持Java、C++、.NET等多种语言。 在"使用Hessian进行服务器-客户端通讯"的案例中,我们可能涉及到以下步骤: 1. **服务器端配置**:首先,我们...

    hessian小例(java)

    Hessian的优点在于其简单性、高效性和跨语言支持,使得不同平台的应用可以方便地进行互操作。 在服务端,我们需要创建一个Hessian服务。这通常涉及到以下步骤: 1. 创建一个Java接口,定义需要暴露给客户端的方法。...

    C#中Hessian的使用例子

    在.NET开发环境中,C#是一种常用的编程语言,而Hessian是一种二进制的远程方法调用(Remote Method Invocation,RMI)协议。Hessian能够帮助开发者实现高效的、跨平台的数据交换,尤其适用于分布式系统中的服务调用...

    android端使用hessian跟web服务器通讯

    在Android应用开发中,与Web服务器进行通讯是常见的需求,Hessian是一种二进制协议,它使得Java和Java、Java和其他语言(如Python、C++)之间的远程调用变得高效且简便。本教程将深入探讨如何在Android端利用Hessian...

Global site tag (gtag.js) - Google Analytics