Я пытаюсь реализовать простой ответ сервера в Perspective Broker.Реализация ссылочных объектов на стороне клиента с Twisted Perspective Broker
Возможная реализация (пожалуйста, предложите другим, если это возможно):
Клиент запрашивает сервер выполнить метод сервера, сервер выполняет затем отвечает (выполнив метод клиента, единственной целью которой является печать сообщение):
[Client-side]:
class ClientPrint(pb.Referenceable):
def remote_clientprint(self, message):
print "Printing the message from the server: ", message
[Server-side]:
class RootServerObject(pb.Root):
def remote_OneFunc(self, ...):
...
print "Now sending the reply..."
*get ClientPrint object?*
clientprintobj.callRemote("clientprint", "this is the reply!")
Как я могу реализовать захват объектов на стороне клиента? Есть ли лучший способ реализовать ответы сервера, чем захват объекта на стороне клиента и вызов метода клиента только для печати?
Вот полный код, где я пытаюсь реализовать ответы:
[Клиентский]:
from twisted.internet import reactor
from twisted.spread import pb
class Client():
def __init__(self, addr, port, spec):
self.addr = None
self.port = None
self.SomeData = None
def connect(self, addr, port):
factory = pb.PBClientFactory()
reactor.connectTCP(addr, port, factory)
def1 = factory.getRootObject()
def1.addCallbacks(self.got_obj, self.err_obj)
def got_obj(self, rootsrvobj):
print "Got root server obj:", rootsrvobj
self.server = rootsrvobj
def2 = self.server.callRemote("SomeFunc", SomeData)
def err_obj(self, reason):
print "Error getting root server obj:", reason
self.quit()
def cmdsub(addr, port, SomeData):
c = Client(addr, port, SomeData)
c.connect(addr, port)
[Серверный]:
class RootServerObject(pb.Root):
def __init__(self):
self.DataOut = None
def remote_SomeFunc(self, SomeData):
self.DataOut = hash(SomeData)
print "Now sending reply..."
*implement a reply?*
Возможно, являются более продвинутыми функциями Twisted (или Twisted PB), которые сделают это более простым.
Документация: https://twistedmatrix.com/documents/12.3.0/core/howto/pb-usage.html#auto3
Спасибо.