使用Message Pack RPC将Object类传递给server方法

时间:2013-07-16 12:41:08

标签: rpc msgpack messagepack

我想从客户端调用服务器中的方法,我想将一个参数传递给该方法,该参数是我编写的类。我怎么能用MsgPack RPC做到这一点。 我知道如何传递int向量或字符串。

1 个答案:

答案 0 :(得分: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','hello@hello')
print  c.call('TestRPC',foo)