【发布时间】:2020-12-19 23:24:45
【问题描述】:
我正在尝试为 ZeroMQ 实现我自己的 Swift 包装器,并支持诸如 RADIO 和 DISH 之类的草稿方法。我已经能够成功实现DISH 包装器来接收数据,我无法实现RADIO 包装器来发送数据。从我在这里可以看到关于pyzmq 的文档,
在我看来pyzmq 库有一个内置函数,允许直接通过组发送消息。但是,在查看zmq.h 的发送功能时,我看不到任何方法可以向群组发送消息。我可以使用此函数发送消息而不会出现任何错误,但是由于我发送的内容没有附加组,因此在菜脚本中没有收到该消息。
有没有办法通过RADIO 套接字通过group 发送数据?
我还研究了如果我使用zmq_msg_t 会如何完成,因为它有一种附加组的方式。所以,我在 Swift 中使用了这个函数:
public func sendRadioMessage(group: String, data: NSData) throws{
var msg = zmq_msg_t.init();
var result : Int32;
let flags: SocketSendRecvOption = .none
result = zmq_msg_init_data(&msg, UnsafeMutableRawPointer(mutating: data.bytes), data.length, nil, nil);
if (result == -1) { throw ZeroMQError.last }
defer {
// Clean up message on scope exit
zmq_msg_close(&msg)
}
result = zmq_msg_set_group(&msg, group);
if (result == -1) { throw ZeroMQError.last }
result = zmq_msg_send(&msg, self.handle, flags.rawValue);
if (result == -1) { throw ZeroMQError.last }
print("sent \(result) bytes")
}
来自我之前的question.
然而,虽然zmq_msg_send() 函数确实返回了正确的发送字节数,但我的python 脚本似乎没有接收到数据。我知道我的 python 脚本可以工作,因为我使用了 this python script 的略微修改版本,来自 pyzmq 示例。
【问题讨论】:
标签: python c++ swift zeromq pyzmq