我试图在使用twisted实现的服务器和客户端之间传输数据。据我所知,使用self。运输。write([data])只有当data是字符串时才起作用。有没有其他方法可以发送其他类型的对象?谢谢!

有帮助吗?

解决方案

套接字携带字节。这是他们唯一携带的东西。TCP连接的任何两个端点只能相互传递字节。

字节不是每种通信形式最有用的数据结构。因此,在此字节传输之上,我们发明了格式化和解释字节的方案。这些是协议。

Twisted将协议表示为类,almsot始终是 twisted.internet.protocol.Protocol, ,其实施特定方案。

这些类具有将不是纯字节的东西转换为纯字节的东西的方法。例如, twisted.protocols.basic.NetstringReceiver 是一个实现 netstring协议.它将特定数量的字节转换为表示字节数和字节本身的字节。这是一个相当微妙的协议,因为它不是立即明显的字节计数是需要传达的信息。

这些类还解释从网络接收的字节,在他们的 dataReceived 方法,根据他们实现的协议,并将产生的信息变成更结构化的东西。 NetstringReceiver 使用长度信息从网络接受正确数量的字节,然后将它们传递到其 stringReceived 作为单个Python的回调 str 实例。

其他协议做的不仅仅是 NetstringReceiver.例如, twisted.protocols.ftp 包括FTP协议的实现。FTP是一种旨在通过套接字(实际上是几个套接字)传递文件列表和文件的协议。 twisted.mail.pop3 实现POP3,一种通过套接字传输电子邮件的协议。

有很多很多不同的协议,因为你可能想做很多很多不同的事情。根据您正在尝试执行的操作,可能有不同的方法可以转换为字节或从字节转换为字节,以使事情更容易或更快或更健壮(依此类推)。所以没有一个单一的协议是理想的一般情况。这包括"发送对象"的情况,因为对象可以采用许多不同的形式,并且可能有许多不同的原因要发送它们,以及许多不同的方式,您可能想要处理以前发送的

你可能想花一点时间思考你需要什么样的沟通。这应该建议您选择进行通信的协议的某些内容。

例如,如果您希望能够调用存在于连接另一端的Python对象上的方法,那么 扭曲的传播 可能会很有趣。

如果你想要跨语言的东西,而只需要传达简单的类型,如整数,字符串和列表,那么 XML-RPC (扭曲的操作方法)可能更适合。

如果你需要一个比XML-RPC更节省空间的协议,并且支持更复杂类型的序列化,那么 安培;安培 也许更合适。

这样的例子不胜枚举。:)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top