在python中实现基于ICE框架的client、server模型

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

几大特性:

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

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

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

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

Printer.ice


1

2

3

4

5

module
Demo {

    interface
Printer {

        void printString(string
s);

    };

};

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

?slice2py Printer.ice

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

?

三、实现服务端代码


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

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

四、实现客户端


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

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)

时间: 2024-07-29 18:44:44

在python中实现基于ICE框架的client、server模型的相关文章

真正搞明白Python中Django和Flask框架的区别

在谈Python中Django框架和Flask框架的区别之前,我们需要先探讨如下几个问题. 一.为什么要使用框架? 为了更好地阐述这个问题,我们把开发一个应用的过程进行类比,往往开发一个应用(web应用.系统应用)跟建造房子的过程一样,需要先打地基,搭好骨架,然后一块砖一块砖叠上去. 而开发一个应用呢?同样也需要一个好的架构设计,数据库建模,然后一个模块一个模块使用代码实现. 如果开发一个软件应用不使用框架,和我们建房子时,每一块砖.每一根钢筋都需要自己生产出来本质上是一样的. 显而易见,如果在

【Python】djangorestframework 基于django框架的接口开发

官网:http://www.django-rest-framework.org/#installation 下载:https://pypi.python.org/pypi/djangorestframework/3.3.3 参考:http://www.cnblogs.com/holbrook/archive/2012/02/19/2358704.html 参考:http://www.weiguda.com/blog/18/ 参考:http://blog.csdn.net/rongyongfeik

在centos中搭建基于smart http的git server

# 由于公司的特殊需求,需要将git集成到IBM的RTC里面,而RTC使用的是http,所以要只能放弃了git原生的ssh,转而使用smart http,git server搭建在centos系统上.博主在浏览了N多教程发现都是比较残缺的,并没有针对smart http的特殊需求,有一篇相对完整的但也有几个坑(博主为了填这几个坑吐了好多口老血,因此决定把教程记录到博客上防各位不时之需,该教程针对像博主这样的非专业运维的developer的手把手教程,欢迎指正!) 以下是主要的环境参数 系统lin

64.Python中ORM查询条件:in和关联模型

定义模型的models.py文件中示例代码如下: from django.db import models class Category(models.Model): name = models.CharField(max_length=100) class Meta: db_table = 'category' class Article(models.Model): title = models.CharField(max_length=100) content = models.TextF

python中基于descriptor的一些概念(上)

@python中基于descriptor的一些概念(上) python中基于descriptor的一些概念(上) 1. 前言 2. 新式类与经典类 2.1 内置的object对象 2.2 类的方法 2.2.1 静态方法 2.2.2 类方法 2.3 新式类(new-style class) 2.3.1 __init__方法 2.3.2 __new__静态方法 2.4. 新式类的实例 2.4.1 Property 2.4.2 __slots__属性 2.4.3 __getattribute__方法

基于Scrapy框架的Python新闻爬虫

概述 该项目是基于Scrapy框架的Python新闻爬虫,能够爬取网易,搜狐,凤凰和澎湃网站上的新闻,将标题,内容,评论,时间等内容整理并保存到本地 详细 代码下载:http://www.demodashi.com/demo/13933.html 一.开发背景 Python作为数据处理方面的一把好手,近年来的热度不断增长.网络爬虫可以说是Python最具代表性的应用之一,那么通过网络爬虫来学习Python以及网络和数据处理的相关内容可以说是再合适不过了. Scrapy是由Python语言开发的一

python中基于descriptor的一些概念(下)

@python中基于descriptor的一些概念(下) 3. Descriptor介绍 3.1 Descriptor代码示例 3.2 定义 3.3 Descriptor Protocol(协议) 3.4 Descriptor调用方法 4. 基于Descriptor实现的功能 4.1 property 4.2 函数和方法,绑定与非绑定 4.3 super 5. 结尾 3. Descriptor介绍 3.1 Descriptor代码示例 class RevealAccess(object):   

18、python网路爬虫之Scrapy框架中的CrawlSpider详解

CrawlSpider的引入: 提问:如果想要通过爬虫程序去爬取"糗百"全站数据新闻数据的话,有几种实现方法? 方法一:基于Scrapy框架中的Spider的递归爬取进行实现(Request模块递归回调parse方法). 方法二:基于CrawlSpider的自动爬取进行实现(更加简洁和高效) CrawlSpider的简介: CrawlSpider其实是Spider的一个子类,除了继承到Spider的特性和功能外,还派生除了其自己独有的更加强大的特性和功能.其中最显著的功能就是"

Python中的端口协议之基于UDP协议的通信传输

UDP协议: 1.python中基于udp协议的客户端与服务端通信简单过程实现 2.udp协议的一些特点(与tcp协议的比较) ------------------------------------------------------------------------------------------------------------------------------------- 一.UDP协议:OSI七层协议中的传输协议的一种(另外一种tcp协议),他们都是一种端口协议 与TCP协