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
ありがとう。