# PyPhotServer **Repository Path**: Photlab/pyphot-server ## Basic Information - **Project Name**: PyPhotServer - **Description**: 光纤传输仿真运算平台服务端 - **Primary Language**: Python - **License**: MulanPubL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 1 - **Created**: 2024-10-30 - **Last Updated**: 2025-10-24 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 1. 模块简介 PyPhotServer是介于PhotLab GUI界面和PyPhotEngine之间通信的模块。 # 2. 功能说明 PyPhotServer模块的主要功能是接收从本地主机或远程主机发送的客户端的仿真消息,将这些仿真消息进行处理,交付计算引擎进行并行计算。 # 3. 依赖环境 创建项目虚拟环境并激活 ```shell python -m venv .venv .venv\Scripts\activate ``` 安装之前请升级pip到最新版 ```shell python.exe -m pip install --upgrade pip ``` 在项目根目录下通过如下脚本安装所有依赖 ```shell pip install -r requirements.txt ``` 然后到官网下载最新的thrift代码生成工具 https://thrift.apache.org/download 如果使用windows系统,则下载thrift.exe,然后将该程序放到本项目路径下或者将thrift路径放到系统全局变量里。 安装如下三个whl文件 ```shell pip install ZW_Engine-2.0-py3-none-any.whl pip install phot-0.5.2-py3-none-any.whl pip install photfdtd-0.0.5-py3-none-any.whl ``` # 4. 开发指南 ## 4.1 编写thriftIDL语法文件 以engine的接口为例。 首先根据thriftIDL语法,设计服务端接口。 ``` service Engine{ common_data_type.PhotResponse add_task(...) ... } ``` 注意:服务与数据类型最好分文件定义。 接口设计完毕之后,将该接口定义文件转换为对应语言的代码。 ``` thrift -out ./ --gen py interface/engine.thrift # thrift -out [输出路径] --gen [语言] [IDL文件路径] ``` ## 4.2 服务端 首先在文件夹service中创建一个类,然后定义接口处理方法,方法名需要与接口定义文件中的接口名相同。 之后在方法之上添加@Api标签,标签中参数为thrift生成代码中Processor的与该接口对应的处理函数,函数名一般为process_{接口名}。 ``` class EngineService: @api(Processor.process_add_task) def add_task(self, ...): ... return ... ... ``` 然后在service文件夹中的__init__.py中引入该类文件。 ``` import engine_service ``` 最后就可以运行服务端。 ``` python ./phot_server/server/main_server.py 127.0.0.1 9000 TBinaryProtocol # python ./phot_server/server/main_server.py [ip] [port] [TJSONProtocol|TBinaryProtocol|TCompactProtocol] ``` ## 4.2客户端 - Python 首先引入thrift相关包 ``` from thrift.transport import TSocket from thrift.transport import TTransport from thrift.protocol import TBinaryProtocol from thrift.protocol import TJSONProtocol from thrift.protocol import TCompactProtocol ``` 然后引入thrift生成的接口代码,包括服务和服务使用的所有数据类型 ``` from phot_server.ipc.engine.Engine import Client from phot_server.ipc.graph_data_type.ttypes import * ``` 定义客户端连接服务端的ip、端口、协议,打开与服务端的连接 ``` transport = TSocket.TSocket('localhost', 8080) transport_protocol = TTransport.TBufferedTransport(transport) protocol_factory = TBinaryProtocol.TBinaryProtocol(transport_protocol) client = Client(protocol_factory) transport.open() ``` 设置与服务端通信的接口,获取接口返回值 ``` add_response = client.add_task(...) ``` 最后关闭连接 ``` transport.close() ``` 详细的python客户端连接服务端的例子,参考test/engine_test.py # 5. 调试方法 运行如下代码,添加print语句或者设置断点来查看代码运行情况 ```shell python ./phot_server/server/main_server.py 127.0.0.1 8080 TBinaryProtocol ``` # 6. 打包方式 现只支持源码打包,开发完成后,保存源码 # 7. 部署步骤 运行源码文件 # 8. 版权声明