0

我正在尝试和twisted一起玩。我已经尝试使用适当的工厂创建服务器和客户端。这是一个很棒的框架,但只能发送字符串:(我想发送一些列表或数组对象作为开始,也许以后会在客户端内部使用来自服务器的对象。但目前我遇到了一些简单的问题:

1) 在工厂模型中,我使用了诸如“clientConnectionFailed”或“clientConnectionLost”之类的方法,如何使用 PB 获得相同的方法?它们对于防止客户端/服务器问题非常有用。

2) 我还使用了“dataReceived”和“connectionLost”或“connectionMade”等方法,如何使用 PB 获得与这些方法相同的功能?

如您所见,我想首先使用 PB 模型而不是工厂重写我的代码。我看过这些例子,但与工厂的例子不同,我无法理解它们。

在此先感谢您的帮助=)

4

1 回答 1

2

PBClientFactory是 a ClientFactory,所以你仍然可以得到clientConnectionFailedclientConnectionLost调用它。如果需要,子类化和覆盖。您还可以使用由(与 PB 一起使用的协议类)notifyOnDisconnect实现的方法,并且在使用 PB 时您通常会使用该方法。BrokerRemoteReference

connectionMade如果需要,您仍然可以覆盖connectionLost协议。正如我所提到的,协议是Broker. 对其进行子类化,覆盖一些方法,并将您的子类(类,而不是实例)设置protocolPBClientFactory.

但是,您不应该覆盖Broker.dataReceived. PB 不是有序的、可靠的、面向流的字节传输。您不必等待一大块字节被传递,然后用您自己的字节块进行响应。PB 是一个远程对象和方法调用协议。您可以使用它通过网络调用方法并将对象传递给这些方法调用。如果您的客户端能够调用服务器上的方法,那么您定义remote_*方法。

PB 文档更详细地解释了这一点。请参阅http://twistedmatrix.com/documents/current/core/howto/的“透视经纪人”部分。

于 2011-04-08T13:52:52.147 回答