0
클라이언트에서 서버의 메소드로 전화를 걸고 저에게 작성된 클래스 인 메소드에 전달하려고합니다. 어떻게하면 MsgPack RPC를 사용하여이 작업을 수행 할 수 있습니까? int에 벡터 나 문자열을 전달하는 방법을 알고 있습니다.메시지 팩 RPC를 사용하여 서버 클래스에 객체 클래스 전달하기
클라이언트에서 서버의 메소드로 전화를 걸고 저에게 작성된 클래스 인 메소드에 전달하려고합니다. 어떻게하면 MsgPack RPC를 사용하여이 작업을 수행 할 수 있습니까? int에 벡터 나 문자열을 전달하는 방법을 알고 있습니다.메시지 팩 RPC를 사용하여 서버 클래스에 객체 클래스 전달하기
호출에 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)