[英]Using twisted to process files
我正在嘗試建立一個扭曲的xmlrpc服務器,該服務器將接受來自客戶端的文件,進行處理,然后返回文件和結果字典。
我以前使用過python,但從未使用過扭曲的庫。 出於我的目的,安全性不是問題,並且ssh協議似乎有些過分。 由於termios
不可用,因此在Windows服務器上也有問題。
因此,我所有的研究都指出xmlrpc是實現此目標的最佳方法。 但是,有兩種可用的文件傳輸方法。 使用xml binary data
方法或http request
方法。
無論哪種方式,文件最多可以容納數百兆,那么我應該使用哪種方法? 感謝我提供示例代碼,因為我找不到扭曲的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: ">
在我對此進行測試時, xmlrpclib.Fault: <Fault 8002: "Can't deserialize input: ">
。 是否因為文件是pdf文件?
XML-RPC是文件傳輸的不佳選擇。 XML-RPC要求以XML支持的方式對文件內容進行編碼。 這在運行時成本和網絡資源上都是昂貴的。 相反,請嘗試僅使用普通的舊HTTP發布或放置文件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.