gpt4 book ai didi

python - 使用 twisted 处理文件

转载 作者:太空宇宙 更新时间:2023-11-04 06:22:01 27 4
gpt4 key购买 nike

我正在尝试设置一个扭曲的 xmlrpc 服务器,它将接受来自客户端的文件,处理它们,并返回一个文件和结果字典。

我以前使用过 python,但从未使用过扭曲的库。出于我的目的,安全性不是问题,而且 ssh 协议(protocol)似乎有点矫枉过正。它在 Windows 服务器上也有问题,因为 termios不可用。

因此,我的所有研究都表明 xmlrpc 是实现这一目标的最佳方式。但是,有两种文件传输方法可用。使用 xml binary data方法,或 http request方法。

无论哪种方式,文件都可能达到几百兆,那么我应该使用哪种方法呢?感谢示例代码,因为我找不到关于使用 twisted 通过 xml 进行文件传输的文档。

更新:

所以似乎用 xmlrpclib.Binary 序列化文件不适用于大文件,或者我用错了。测试代码如下:

from twisted.web import xmlrpc, server

class Example(xmlrpc.XMLRPC):
"""
An example object to be published.
"""

def xmlrpc_echo(self, x):
"""
Return all passed args.
"""
return x

def xmlrpc_add(self, a, b):
"""
Return sum of arguments.
"""
return a + b

def xmlrpc_fault(self):
"""
Raise a Fault indicating that the procedure should not be used.
"""
raise xmlrpc.Fault(123, "The fault procedure is faulty.")

def xmlrpc_write(self, f, location):
with open(location, 'wb') as fd:
fd.write(f.data)

if __name__ == '__main__':
from twisted.internet import reactor
r = Example(allowNone=True)
reactor.listenTCP(7080, server.Site(r))
reactor.run()

和客户端代码:

import xmlrpclib
s = xmlrpclib.Server('http://localhost:7080/')
with open('test.pdf', 'rb') as fd:
f = xmlrpclib.Binary(fd.read())
s.write(f, 'output.pdf')

我得到 xmlrpclib.Fault: <Fault 8002: "Can't deserialize input: ">当我测试这个时。是因为文件是pdf吗?

最佳答案

XML-RPC 是文件传输的糟糕选择。 XML-RPC 要求文件内容以 XML 支持的方式进行编码。这在运行时成本和网络资源方面都是昂贵的。相反,尝试使用普通的旧 HTTP 发布或放置文件。

关于python - 使用 twisted 处理文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11545195/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com