Я хочу сделать вызов от клиента методу на сервере, и я хочу передать методу аргумент, который является классом, написанным мной. Как это сделать, используя MsgPack RPC. Я знаю, как передать int вектор или строку.Передать метод класса объекта на сервер с использованием пакета сообщений RPC
0
A
ответ
0
Вы можете добавить атрибут to_msgpack к вашему вызову и определить для него кодер. Это позволит вам отправить объект на сервер. сервер получит его в качестве словаря. , если хотите, вы можете преобразовать его в объект. лично я хотел бы msgpack-rpc дать вам указать object_hook и в классе сказать form_msgpack. просто чтобы показать, что я использовал mgpack в get_object.
код сервера:
#MSgpackRpcServer.py
import msgpackrpc
import msgpack
def encode_foo(obj):
if isinstance(obj,Foo):
return {'Foo':True,'id':obj.id,'name':obj.name,'email':obj.email}
def decode_foo(obj):
if 'Foo' in obj:
return Foo(obj['id'],obj['name'],obj['email'])
def get_object(inobj):
return msgpack.unpackb(msgpack.packb(inobj),object_hook=decode_foo)
class Foo(object):
to_msgpack=encode_foo
def __init__(self,a,b,c):
self.id=a
self.name=b
self.email= c
def something(self):
return self.id*100
class SomeService(object):
def TestRPC(self,a):
print a # prints dictionary
setobject = get_object(a)
print setobject # prints object instance
return setobject.id +10 # do some thing
if __name__ == '__main__':
server = msgpackrpc.Server(SomeService())
server.listen(msgpackrpc.Address("localhost", 8001))
server.start()
Client Код:
from MSgpackRpcServer import Foo
import msgpackrpc
c = msgpackrpc.Client(msgpackrpc.Address('127.0.0.1',8001))
foo= Foo(11,'Hello','[email protected]')
print c.call('TestRPC',foo)