Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >在python中实现基于ICE框架的cl

在python中实现基于ICE框架的cl

作者头像
py3study
发布于 2020-01-03 08:30:07
发布于 2020-01-03 08:30:07
2.2K00
代码可运行
举报
文章被收录于专栏:python3python3
运行总次数:0
代码可运行

ICE (Internet Communication Engine) 是zeroc公司实现的通信中间件

几大特性:

    1. 多语言支持C++、Java、python, C#等,

    2.  对分布式系统的支持,涵盖了负载均衡位置服务、计算节点需要实时启动等特性。

    3.  提供了基于发布-订阅机制的消息组建ICEStorm

一、书写slice文件,然要按照slice规定的语法来实现

Printer.ice

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
module
 Demo {
    interface
 Printer {
        void printString(string
 s);
    };
};

二、 编译slice代码,官方教程提供了命令行的编译方式:

    ​slice2py Printer.ice

这种方法还需要额外安装slice2py命令,为了省事没有采用这种方法,我们采用的是在程序中动态的加载slice文件并编译它。

三、实现服务端代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import sys,
 traceback, Ice
  
#
 动态加载slice文件并编译
Ice.loadSlice("./Printer.ice")
  
#
 Demo即是从Printer.ice导出的模块名
import Demo
  
#
 实现一个服务类
class PrinterI(Demo.Printer):
    def printString(self,
 s, current=None):
        print s
  
status = 0
ic = None
try:
    #
 初始化ice运行环境(ice run time)  Ice.Communicator
    ic = Ice.initialize(sys.argv)

  
    #
 初始化一个适配器adapter 他的名字叫"SimplePrinterAdapter"
    #
 采用默认协议tcp/ip 监听端口10000
    adapter = ic.createObjectAdapterWithEndpoints("SimplePrinterAdapter", "default
 -p 10000")

  
    #
 为我们的Printer接口实例化一个工作的仆人
    object = PrinterI()

  
    #
 将上述实例化好的仆人添加到适配器中,他的识别码是"SimplePrinter"
    adapter.add(object,
 ic.stringToIdentity("SimplePrinter"))

  
    #
 激活适配器
    adapter.activate()
    #
 等待结束信号
    ic.waitForShutdown()
except:
    traceback.print_exc()
    status = 1
  
if ic:
    #
 Clean up
    try:
        ic.destroy()
    except:
        traceback.print_exc()
        status = 1

四、实现客户端

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import sys,
 traceback, Ice
import Demo

  
status = 0
ic = None
try:

  
    #
 初始化运行环境
    ic = Ice.initialize(sys.argv)

  
    #
 获取远程printer服务的代理
    base = ic.stringToProxy("SimplePrinter:default
 -p 10000")

  
    #
 请求服务端确认:”这是不是 Demo::Printer的代理接口?“
    printer = Demo.PrinterPrx.checkedCast(base)
    if not printer:
        raise RuntimeError("Invalid
 proxy")

  
    #
 远程调用,看起来像本地的服务一样
    printer.printString("Hello
 World!")
except:
    traceback.print_exc()
    status = 1

  
if ic:
    #
 Clean up
    try:
        ic.destroy()
    except:
        traceback.print_exc()
        status = 1

  
sys.exit(status)
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/09/24 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
ice安装以及简单使用
ICE(Internet Communications Engine)是一个中间件平台。作为一个高性能的互联网通信平台,ICE包含了很多分层的服务和插件(Plug-ins),并且简单、高效和强大。 ICE当前支持C++、Java、C#、Visual Basic、Python和PHP编程语言,并支持在多种操作系统上运行。更多的操作系统和编程语言将会在以后的发布中支持。   1:下载安装包:http://www.zeroc.com/download.html   2:安装ice并在环境变量中配置ice的安装路径 例如:path=D:\ice\Ice-3.5.1\bin 3:如果进行生成java程序,使用slice2java,出现如下:代表安装成功。 slice2java: error: no input file Usage: slice2java [options] slice-files... Options: -h, --help              Show this message. -v, --version           Display the Ice version. -DNAME                  Define NAME as 1. -DNAME=DEF              Define NAME as DEF. -UNAME                  Remove any definition for NAME. -IDIR                   Put DIR in the include file search path. -E                      Print preprocessor output on stdout. --output-dir DIR        Create files in the directory DIR. --tie                   Generate TIE classes. --impl                  Generate sample implementations. --impl-tie              Generate sample TIE implementations. --depend                Generate Makefile dependencies. --depend-xml            Generate dependencies in XML format. --list-generated        Emit list of generated files in XML format. -d, --debug             Print debug messages. --ice                   Permit `Ice' prefix (for building Ice sourc --underscore            Permit underscores in Slice identifiers. --checksum CLASS        Generate checksums for Slice definitions in --stream                Generate marshaling support for public stre --meta META             Define global metadata directive META. 4:使用ice写一个脚本 module demo {  interface Printer { void printString(string s);   };  };  文件名为printer.ice 5:转到printer.ice所在目录,使用命令slice2java printer.ice 生成的文件copy到你的编辑器中。 6:引入Ice.jar到你的项目下面,使用你的ice安装时lib下面的Ice.jar。 7:编写服务端和客户端程序
用户5166556
2019/04/16
2.6K0
详细教你如何部署ICE服务(一)
这系列文章将会一步步教你如何部署一个ICE服务,如果你正在读这篇博客,我想你已经了解了什么是ICE(Internet Communications Engine),以及如何去实现ICE服务,并且了解什么是ICE对象、ICE对象标识符、ICE对象适配器、ICE服务实现servant、ICE通信器等概念,当然如果你连什么是ICE都不知道,我不建议你继续读下去。
全栈程序员站长
2022/09/02
1.8K0
详细教你如何部署ICE服务(一)
Python异常处理traceback和exc_info
开发过程中一般都会使用traceback将捕获到的异常打印出来。 import traceback def fake_exception(): 1 / 0 def catch_exception(): try: fake_exception() except: traceback.print_exc() catch_exception() 结果 Traceback (most recent call last): File ".\test.p
Ewdager
2020/07/14
6540
java ice 连接服务器_ICE实现服务器客户端
本文将结合实际项目,做一个基于ice的实际项目实例应用,该实例完成客户端调用服务端接口完成消息发送,计算的功能。1,创建java项目ICEServer,导入ice.jar.
全栈程序员站长
2022/07/01
6.1K0
利用Python Paramiko开发
    前面利用Python中的Paramiko模块可以进行SSH的连接,以及用来传送文件(SFTP),但是无论是哪一种方式,连接都是短暂的,并非是长连的,即一次执行一个命令或上传与下载一个文件,显然效率是不如直接使用Linux shell下的ssh连接命令来进行连接。其实在将Paramiko的源码解压出来后,里面有一个demo的文件夹,里面有一个demo.py的程序,利用它,我们就可以进行长连接,即像ssh一样连接远程主机:
py3study
2020/01/06
1.1K0
利用Python Paramiko开发
python中callback_python安装后怎么打开
刚接触Python的时候,简单的异常处理已经可以帮助我们解决大多数问题,但是随着逐渐地深入,我们会发现有很多情况下简单的异常处理已经无法解决问题了,如下代码,单纯的打印异常所能提供的信息会非常有限。
全栈程序员站长
2022/11/16
5910
Python执行hive sql
该python脚本是用于执行hive脚本的,需要设置hive的可执行环境变量,其实质转化为shell下命令 hive -e 'sql语句’ 的方式执行,然后把结果重定向到控制台显示。注:由于该脚本是直接调用shell中的hive命令,所以需要在安装hive的服务器上执行。
py3study
2020/01/07
4.1K0
Python执行hive sql
python笔记71 - traceback.print_exc()保存异常内容
python运行代码出现异常后,会在控制台输出报错内容,那么如何把报错的完整内容保存到日志文件中呢?
上海-悠悠
2021/11/26
1.9K0
python之ip校验简单总结
Note: 不能校验ip的长度,可以校验每个IP中每段的有效性,和socket结果类似
追马
2020/07/06
2.2K0
python——获取更加详细的异常信息
在python中有 try——except 的方法捕获异常,可以获取到异常的种类以及自定义异常,但是有时候对于debug测试来说,信息还是不太完整,比如说 触发异常的具体位置在哪: 我们可以使用 traceback这个内置模块来获取异常更加详细的信息:
py3study
2020/01/06
4880
python之异常处理
我们在编码或者做产品的时候,不仅要考虑正向的,还要考虑到异常情况下如何处理。人生也是如此,成功的时候要考虑落败时,这样考虑问题就全面,周全。
赵云龙龙
2019/07/11
7350
python之异常处理
我的python学习--第十二天(二)
  Python的异常处理能力是很强大的,可向用户准确反馈出错信息。在Python中,异常也是对象,可对它进行操作。
py3study
2020/01/08
7380
【python】云打印实现
记录一下这一篇,python云打印实现-朝花夕拾,代码通过监听文件夹有无产生新文件来判断是否执行,我尝试运行了下没问题,于是打算转载一下
德宏大魔王
2023/08/08
4680
【python】云打印实现
Python自动化运维之异常处理
1、异常 异常就是非正常状态,在Python中使用异常对象来表示异常。若程序在编译或运行过程中发生错误,程序的执行过程就会发生改变,抛出异常对象,程序流进入异常处理。如果异常对象没有被处理或捕捉,程序就会执行回溯(Traceback)来终止程序。 2、异常类型 通用异常类型表
py3study
2020/01/06
1.1K0
thrift例子:python客户端/java服务端
java服务端的代码请看上文。 1、说明: 这两篇文章其实解决的问题是,当使用python去访问大数据线上集群的时候,遇到两个问题: 1)python-hadoop和python-hive相关包链接不稳定,表现为经常出现链接超时; 2)如果使用fork进程执行hadoop fs或者hive -e的方式则消耗大量的机器资源,包括进程资源和集群链接资源。 我们的解决方式是写一个java的代理服务,使用java-hadoop封装了对集群的操作,通过thrift提供接口给python程序。 2、编译.thrfit
用户1225216
2018/03/05
1.5K0
#6 ipdb模块源代码解读
前言 好久不见,大家最近可好?。通过前几节的学习,相信你已经掌握了面向对象的大量知识,但是光知道是不够的,需要自己多写、多看,学一门语言无非不过这两种秘诀嘛。因此本篇博文带着大家剖析一次源代码,剖析对
py3study
2020/01/17
9540
Python traceback 获取详细的异常信息
python中用于处理异常栈的模块是traceback模块,它提供了print_exception、format_exception等输出异常栈等常用的工具函数。 应用实例 try: 1/0 except Exception,e: print e 输出结果是 integer division or modulo by zero 只知道是报了这个错,但是却不知道在哪个文件哪个函数哪一行报的错。 使用 traceback 模块 import traceback try:
Woodson
2018/06/29
9440
python socket学习
[root@localhost example]# python echoclient1.py
py3study
2020/01/07
4170
CoffeeMiner:劫持WiFi网络接入设备进行“挖矿”的框架
几个星期以前,我看到了网上关于黑客劫持星巴克WiFi网络中的笔记本电脑进行“挖矿”的报道,非常有意思,结合分析,我认为,还能用中间人MITM测试方式来实现类似目的。本文中我们就来讨论,如何以MITM方式在html页面中注入javascript,让那些接入公共WIFI的电子设备成为黑客手中的“挖矿”矿工。最终我会编写一个实际的被称为“CoffeeMiner”的脚本,可以用它来在咖啡店等公开WIFI网络环境中进行匿名渗透,实现掌控大量电子设备开展“挖矿”目的。 测试场景 要在在一个公开的WIFI网络环境中实
FB客服
2018/02/24
1.4K0
CoffeeMiner:劫持WiFi网络接入设备进行“挖矿”的框架
python raid monitor
import os ,time ,sys, traceback,commands,subprocess
py3study
2020/01/12
6620
相关推荐
ice安装以及简单使用
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验