我有一個簡單的「回聲」 PB客戶端和服務器,其中客戶端發送的對象,其回聲相同的對象返回到客戶端的服務器:twisted:如何使用Perspective Broker發送和接收同一個對象?
客戶端:
from twisted.spread import pb
from twisted.internet import reactor
from twisted.python import util
from amodule import aClass
factory = pb.PBClientFactory()
reactor.connectTCP("localhost", 8282, factory)
d = factory.getRootObject()
d.addCallback(lambda object: object.callRemote("echo", aClass()))
d.addCallback(lambda response: 'server echoed: '+response)
d.addErrback(lambda reason: 'error: '+str(reason.value))
d.addCallback(util.println)
d.addCallback(lambda _: reactor.stop())
reactor.run()
服務器:
from twisted.application import internet, service
from twisted.internet import protocol
from twisted.spread import pb
from amodule import aClass
class RemoteClass(pb.RemoteCopy, aClass):
pass
pb.setUnjellyableForClass(aClass, RemoteClass)
class PBServer(pb.Root):
def remote_echo(self, a):
return a
application = service.Application("Test app")
# Prepare managers
clientManager = internet.TCPServer(8282, pb.PBServerFactory(PBServer()));
clientManager.setServiceParent(application)
if __name__ == '__main__':
print "Run with twistd"
import sys
sys.exit(1)
的ACLASS是一個簡單的類實現可複製: 從twisted.spread進口PB
class aClass(pb.Copyable):
pass
當運行上述代碼中,我得到這個錯誤: twisted.spread.jelly.InsecureJelly:模塊內建不允許(在類型內置 .RemoteClass)。
實際上,由於在服務器端使用pb.setUnjellyableForClass(aClass,RemoteClass)進行了安全保護,所以該對象沒有任何問題地發送到服務器,但是一旦它返回給客戶端,就會引發該錯誤。
我正在尋找一種簡單的方法來發送/接收兩個同伴之間的對象。
我已經從server.py中刪除了類,並將它們放入了amodule.py,這裏是我的新文件內容:server.py:http://codepad.org/fRZTwgKI amodule.py:http:// codepad。 org/h9rON50E 沒有任何變化,我仍然得到果凍錯誤 –