2013-07-16 2 views
0

Я хочу сделать вызов от клиента методу на сервере, и я хочу передать методу аргумент, который является классом, написанным мной. Как это сделать, используя MsgPack RPC. Я знаю, как передать int вектор или строку.Передать метод класса объекта на сервер с использованием пакета сообщений RPC

ответ

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) 

 Смежные вопросы

  • Нет связанных вопросов^_^