我应该选择哪个RPC模块在Python中实现RCP,并能后续更改连接方式?

0 投票
3 回答
2061 浏览
提问于 2025-04-17 07:58

我需要在两个Python之间实现一些远程过程调用(RPC),但是由于安全原因,连接方式非常有限。

目前看来,我可能可以通过SSH来连接,并在远程系统上运行一个Python脚本。

将来情况可能会有所变化,我们可能需要使用其他方式连接,比如telnet,所以我希望找到一个可以支持不同协议的解决方案。

另一个潜在的限制是关于Python版本的,它必须能够在Python 2.5到2.7之间工作,即使客户端和服务器运行的是不同的版本。

请建议我应该使用什么,前提是你有成功的经验,否则我也可以自己去查资料;)

3 个回答

0

Spyne 支持可插拔的协议和传输方式,但目前还不支持 SSH(或者其他类似的套接字传输)。这个项目虽然很稳定,但还比较新,特别是客户端的逻辑还需要认真改进。

至于你最初的问题,在我熟悉的序列化工具中(大部分是在 spyne 网站上看到的),最适合通过流传输来使用的是 MessagePack,因为它支持对文件类对象的迭代(也就是流式反序列化)接口。

0

作为Python 2.6及以上版本的一个部分解决方案,你可以看看Versile Python(目前还在开发中)。我们刚刚添加了通过管道进行反应器驱动的字节通信的支持(这需要一个可以在管道文件描述符上使用select.select的系统,也就是说,Windows不支持)。这使得可以通过管道或标准输入/输出连接到VPy ORB。你可以查看这个示例,了解它如何与ssh一起使用。

Versile Python需要Python 2.6及以上版本或3.x,所以不幸的是,它不支持2.5版本。

1

我觉得在你的情况下,最简单的方式让两个不同的Python进程互相沟通,就是使用pyro3。我最近在一个小项目中用过pyro4,效果很好,让我可以专注于想要发送和接收的信息,而不是如何正确地编码或解码这些信息。

我建议你使用v3版本,因为根据源代码中的tox.ini文件,v4版本没有经过Python 2.5的测试,所以你可能会遇到一些问题。

关于网络方面,这个库会自己处理套接字,所以没有专门支持telnet或ssh(不过使用paramiko在待办事项列表中)。因此,你可能需要依赖ssh隧道,就像这个例子所示。

撰写回答