IceGrid 用于Python服务器和客户端通信——参数传递

本篇介绍如何用IceGrid建立python多机通信,传递比较复杂的参数

Ice代码:Demo.ice

复制代码
#ifndef TOS_ICE_COMMON
#define TOS_ICE_COMMON

module demo
{
    class EventArgs
    {
        string source;
        string occurTime;
    };

    struct Point
    {
        int x;
        int y;        
    };

    class pointEventArgs extends EventArgs
    {
        Point pt;
    };

    interface PointEvent
    {
        ["amd","ami"] idempotent void OnNewPointEvent(pointEventArgs args);   
    } 
};

#endif
复制代码

1.python安装zeroC Ice:

pip install zeroc-ice

或者参照:https://blog.csdn.net/qq_37556007/article/details/80843541

2.对Ice文件进行切片

slice2py Demo.ice

得到Demo_ice.py

3.编写客户端

复制代码
import Demo_ice
import Ice
import sys
import time

class Client:
    def __init__(self):
        self.point = Demo_ice._M_demo.Point(x=10, y=20)
        self.event = Demo_ice._M_demo.pointEventArgs(source='client', occurTime=time.time().__str__(), pt=self.point)

        with Ice.initialize(sys.argv) as communicator:
            base = communicator.stringToProxy('Communicate:tcp -p 10001')
            self.contract = Demo_ice._M_demo.PointEventPrx.checkedCast(base)
            if not self.contract:
                raise RuntimeError('Invalid Proxy')
        
       # 如要调用同步发送方法,方法名去掉Async即可
       # 参数加两个括号因为传过去的是个元组  self.contract.OnNewPointEventAsync((self.event)) Client()
复制代码

4.编写服务器

复制代码
import Demo_ice
import Ice
import sys

class DemoI(Demo_ice._M_demo.PointEvent):
  # 不同于Java和C++ Slice出的抽象类,Python的类并不含有异步方法,继承的同步方法可以用于异步调用
    def OnNewPointEvent(self, args, current=None):
        print "Received:"
        print args

with Ice.initialize(sys.argv) as communicator:
    adapter = communicator.createObjectAdapterWithEndpoints("Communicate:tcp", "tcp -p 10001")
    object = DemoI()
    adapter.add(object, communicator.stringToIdentity("Communicate"))
    adapter.activate()
    communicator.waitForShutdown()
复制代码

 

posted @   Asp1rant  阅读(464)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示