2013-07-16 4 views

답변

0

호출에 to_msgpack 속성을 추가하고 이에 대한 인코더를 정의 할 수 있습니다. 이렇게하면 서버에 개체를 보낼 수 있습니다. 서버는 그것을 사전으로받습니다. 개체로 변환 할 수 있습니다. 개인적으로 나는 msgpack-rpc를 사용하여 form_msgpack 클래스에서 object_hook을 지정할 수 있습니다. 그냥 get_object에서 mgpack을 사용한 것을 보여주기 위해서입니다.

서버 코드 :

#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() 

클라이언트 코드 :

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)