我想继承zmq.Socket类,以便在发送Python对象和反序列化收到的消息之前自动序列化它们。现在是zmq.Socket的docstring,为了创建一个套接字,我应该创建一个 context ,然后调用
socket = context.socket(socket_type)
使用这个方案,我如何使用自己的zmq.Socket子类?
答案 0 :(得分:0)
您是否了解套接字中的send_pyobj
和recv_pyobj
方法?他们用pickle串行化Python对象。
这会解决您的问题吗?否则,如果您可以指定您的问题,那就太棒了。
答案 1 :(得分:0)
zmq.Context类上有一个(很少有文档证明)_socket_class
属性,可用于自定义socket(socktype)
方法的结果。例如,要添加CBOR序列化方法:
import cbor
import zmq
class CBORSocket(zmq.Socket):
def send_cbor(self, obj, flags=0):
return self.send(cbor.dumps(obj), flags=flags)
def recv_cbor(self, flags=0):
return cbor.loads(self.recv(flags=flags))
class CBORContext(zmq.Context):
_socket_class = CBORSocket
def main():
ctx = CBORContext()
rep = ctx.socket(zmq.REP)
req = ctx.socket(zmq.REQ)
rep.bind('inproc://foo')
req.connect('inproc://foo')
req.send_cbor('Hello world!')
print(rep.recv_cbor())
main()
尽管缺少_socket_class
的文档,但它确实出现在pyzmq example scripts之一中,尽管documentation itself中似乎没有使用它们。不过,我还是希望这是官方的/不太可能会随意消失!