服务之间快速进行数据交互的一种方式
# server.py
import Pyro4
# 创建一个简单的远程对象
@Pyro4.expose
class MyRemoteObject:
def say_hello(self, name):
return f"Hello, {name}!"
def main():
daemon = Pyro4.Daemon()
uri = daemon.register(MyRemoteObject)
print("Server URI:", uri)
with open("server_uri.txt", "w") as f:
f.write(str(uri))
print("Server is ready.")
daemon.requestLoop()
if __name__ == "__main__":
main()
# client.py
import Pyro4
def main():
with open("server_uri.txt", "r") as f:
server_uri = f.read()
with Pyro4.Proxy(server_uri) as remote_object:
remote_object._pyroTimeout = 0.02
try:
name = input("Enter your name: ")
result = remote_object.say_hello(name)
print("Server response:", result)
except Exception as e:
print("Server did not respond within the specified timeout.")
if __name__ == "__main__":
main()
客户端示例
# client.py
import sys
import threading
from PySide6.QtWidgets import QApplication, QMainWindow, QLabel, QVBoxLayout, QWidget, QPushButton
import Pyro4
# 创建 PySide6 应用程序
app = QApplication(sys.argv)
# 创建 PySide6 窗口
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
# 创建主窗口布局和容器
central_widget = QWidget(self)
layout = QVBoxLayout(central_widget)
self.setCentralWidget(central_widget)
# 创建一个标签用于显示 Pyro4 数据
self.label = QLabel("Pyro4 Data: None", self)
layout.addWidget(self.label)
# 创建按钮用于退出应用程序
exit_button = QPushButton("Exit", self)
layout.addWidget(exit_button)
# 连接按钮的点击事件到退出应用程序
exit_button.clicked.connect(self.close)
# 启动 Pyro4 服务线程
self.pyro_thread = PyroThread()
self.pyro_thread.data_updated.connect(self.update_ui)
self.pyro_thread.start()
def update_ui(self, data):
# 在这里更新 UI,例如更新标签的文本
self.label.setText(f"Pyro4 Data: {data}")
# 创建 Pyro4 服务线程
class PyroThread(threading.Thread):
data_updated = Pyro4.QtCore.Signal(str)
def run(self):
# 在这里监听 Pyro4 数据更新
Pyro4.config.SERIALIZER = 'pickle' # 使用 pickle 序列化
Pyro4.Daemon.serveSimple(
{ExampleClass: "example"},
host="localhost",
port=9999,
ns=False, # 注册服务
verbose=True # 日志
)
if __name__ == "__main__":
# 创建 PySide6 主窗口
main_window = MainWindow()
main_window.show()
# 运行 PySide6 应用程序
sys.exit(app.exec())
# server.py
import Pyro4
# 指定服务器的IP地址和端口号
server_host = "192.168.1.100"
server_port = 9999
# 创建服务器的URI
server_uri = f"PYRO:example@{server_host}:{server_port}"
# 创建一个PYRO代理对象来连接到服务器
remote_object = Pyro4.Proxy(server_uri)
# 调用远程对象的方法
result = remote_object.some_method()
# 处理远程方法的返回值
print(result)
版权说明
本文地址:http://www.liuyangdeboke.cn/?post=59
未标注转载均为本站远程,转载请注明文章出处:
发表评论