【RPC框架探索】(一)ICE框架的探索

2024-03-29 00:08
文章标签 rpc 框架 探索 ice

本文主要是介绍【RPC框架探索】(一)ICE框架的探索,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

【1】基于Linux CentOS-7的安装

cd /etc/yum.repos.dsudo 
wget https://zeroc.com/download/rpm/zeroc-ice-el7.reposudo 
yum install ice-all-runtime ice-all-devel

【2】编写一个基本的slice,保存为Printer.ice

module Demo {interface Printer {void printString(string s);};
};

编译slice

$ mkdir generated
$ slice2java --output-dir generated Printer.ice

编写一个基本实现

public class PrinterI extends Demo._PrinterDisp {public voidprintString(String s, Ice.Current current){System.out.println(s);}
}

【2】编写Server代码

public class Server {public static voidmain(String[] args){int status = 0;Ice.Communicator ic = null;try {ic = Ice.Util.initialize(args);Ice.ObjectAdapter adapter =ic.createObjectAdapterWithEndpoints("SimplePrinterAdapter", "default -p 10000");Ice.Object object = new PrinterI();adapter.add(object, ic.stringToIdentity("SimplePrinter"));adapter.activate();ic.waitForShutdown();} catch (Ice.LocalException e) {e.printStackTrace();status = 1;} catch (Exception e) {System.err.println(e.getMessage());status = 1;}if (ic != null) {// Clean up//try {ic.destroy();} catch (Exception e) {System.err.println(e.getMessage());status = 1;}}System.exit(status);}
}

编译代码

$ mkdir classes
$ javac -d classes -classpath classes:/usr/share/java/ice.jar \
Server.java PrinterI.java generated/Demo/*.java

这里注意想一下ice.jar的jar的位置,一定要是正确的位置

【3】编写Client代码

public class Client {public static voidmain(String[] args){int status = 0;Ice.Communicator ic = null;try {ic = Ice.Util.initialize(args);Ice.ObjectPrx base = ic.stringToProxy("SimplePrinter:default -p 10000");Demo.PrinterPrx printer = Demo.PrinterPrxHelper.checkedCast(base);if (printer == null)throw new Error("Invalid proxy");printer.printString("Hello World!");} catch (Ice.LocalException e) {e.printStackTrace();status = 1;} catch (Exception e) {System.err.println(e.getMessage());status = 1;}if (ic != null) {// Clean up//try {ic.destroy();} catch (Exception e) {System.err.println(e.getMessage());status = 1;}}System.exit(status);}
}

编译Client

$ javac -d classes -classpath classes:/usr/share/java/ice.jar \
Client.java PrinterI.java generated/Demo/*.java

【4】执行Server和Client

cd classes
java Server &
java Client &

出现错误

Error: A JNI error has occurred, please check your installation and try again

出现这个错误,检查发现CLASSPATH中没有设置ice.jar,搜索系统ice.jar,发现在/usr/share/java/ice.jar,将其添加到classpath中,问题解决,可以使用下面的脚本setenv.sh

#! /bin/bash

JAVA_HOME=/usr/java/jdk1.8.0_131
CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:/usr/share/java/ice.jar
PATH=$JAVA_HOME/bin:$PATH
export JAVA_HOME CLASSPATH PATH

执行source setenv.sh,设置好相关变量

java Server &
java Client &

出现结果

Hello World!

调用成功
【5】使用python客户端调用java的服务端
安装pip和ice-python

sudo yum install python-pip
pip install zeroc-ice

出现错误

#include <Python.h>
compilation terminated.
error: command 'gcc' failed with exit status 1

安装python开发环境解决

sudo yum install python-devl

出现错误

#include <bzlib.h>
compilation terminated.
error: command 'gcc' failed with exit status 1

安装bzip2开发库

sudo yum install bzip2-devel

编译python版的ice文件

slice2py Printer.ice

编写python的Client.py

import sys, traceback, Ice
import Demostatus = 0
ic = None
try:ic = Ice.initialize(sys.argv)base = ic.stringToProxy("SimplePrinter:default -p 10000")printer = Demo.PrinterPrx.checkedCast(base)if not printer:raise RuntimeError("Invalid proxy")printer.printString("Hello World!")
except:traceback.print_exc()status = 1if ic:# Clean uptry:ic.destroy()except:traceback.print_exc()status = 1sys.exit(status)

然后直接调用

python Client.py

结果

Hello World!

这篇关于【RPC框架探索】(一)ICE框架的探索的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/857074

相关文章

MyBatis框架实现一个简单的数据查询操作

《MyBatis框架实现一个简单的数据查询操作》本文介绍了MyBatis框架下进行数据查询操作的详细步骤,括创建实体类、编写SQL标签、配置Mapper、开启驼峰命名映射以及执行SQL语句等,感兴趣的... 基于在前面几章我们已经学习了对MyBATis进行环境配置,并利用SqlSessionFactory核

深入探索协同过滤:从原理到推荐模块案例

文章目录 前言一、协同过滤1. 基于用户的协同过滤(UserCF)2. 基于物品的协同过滤(ItemCF)3. 相似度计算方法 二、相似度计算方法1. 欧氏距离2. 皮尔逊相关系数3. 杰卡德相似系数4. 余弦相似度 三、推荐模块案例1.基于文章的协同过滤推荐功能2.基于用户的协同过滤推荐功能 前言     在信息过载的时代,推荐系统成为连接用户与内容的桥梁。本文聚焦于

cross-plateform 跨平台应用程序-03-如果只选择一个框架,应该选择哪一个?

跨平台系列 cross-plateform 跨平台应用程序-01-概览 cross-plateform 跨平台应用程序-02-有哪些主流技术栈? cross-plateform 跨平台应用程序-03-如果只选择一个框架,应该选择哪一个? cross-plateform 跨平台应用程序-04-React Native 介绍 cross-plateform 跨平台应用程序-05-Flutte

Spring框架5 - 容器的扩展功能 (ApplicationContext)

private static ApplicationContext applicationContext;static {applicationContext = new ClassPathXmlApplicationContext("bean.xml");} BeanFactory的功能扩展类ApplicationContext进行深度的分析。ApplicationConext与 BeanF

数据治理框架-ISO数据治理标准

引言 "数据治理"并不是一个新的概念,国内外有很多组织专注于数据治理理论和实践的研究。目前国际上,主要的数据治理框架有ISO数据治理标准、GDI数据治理框架、DAMA数据治理管理框架等。 ISO数据治理标准 改标准阐述了数据治理的标准、基本原则和数据治理模型,是一套完整的数据治理方法论。 ISO/IEC 38505标准的数据治理方法论的核心内容如下: 数据治理的目标:促进组织高效、合理地

AI(文生语音)-TTS 技术线路探索学习:从拼接式参数化方法到Tacotron端到端输出

AI(文生语音)-TTS 技术线路探索学习:从拼接式参数化方法到Tacotron端到端输出 在数字化时代,文本到语音(Text-to-Speech, TTS)技术已成为人机交互的关键桥梁,无论是为视障人士提供辅助阅读,还是为智能助手注入声音的灵魂,TTS 技术都扮演着至关重要的角色。从最初的拼接式方法到参数化技术,再到现今的深度学习解决方案,TTS 技术经历了一段长足的进步。这篇文章将带您穿越时

ZooKeeper 中的 Curator 框架解析

Apache ZooKeeper 是一个为分布式应用提供一致性服务的软件。它提供了诸如配置管理、分布式同步、组服务等功能。在使用 ZooKeeper 时,Curator 是一个非常流行的客户端库,它简化了 ZooKeeper 的使用,提供了高级的抽象和丰富的工具。本文将详细介绍 Curator 框架,包括它的设计哲学、核心组件以及如何使用 Curator 来简化 ZooKeeper 的操作。 1

【Kubernetes】K8s 的安全框架和用户认证

K8s 的安全框架和用户认证 1.Kubernetes 的安全框架1.1 认证:Authentication1.2 鉴权:Authorization1.3 准入控制:Admission Control 2.Kubernetes 的用户认证2.1 Kubernetes 的用户认证方式2.2 配置 Kubernetes 集群使用密码认证 Kubernetes 作为一个分布式的虚拟

Spring Framework系统框架

序号表示的是学习顺序 IoC(控制反转)/DI(依赖注入): ioc:思想上是控制反转,spring提供了一个容器,称为IOC容器,用它来充当IOC思想中的外部。 我的理解就是spring把这些对象集中管理,放在容器中,这个容器就叫Ioc这些对象统称为Bean 用对象的时候不用new,直接外部提供(bean) 当外部的对象有关系的时候,IOC给它俩绑好(DI) DI和IO

Sentinel 高可用流量管理框架

Sentinel 是面向分布式服务架构的高可用流量防护组件,主要以流量为切入点,从限流、流量整形、熔断降级、系统负载保护、热点防护等多个维度来帮助开发者保障微服务的稳定性。 Sentinel 具有以下特性: 丰富的应用场景:Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应