Rust,libzmq,客户端只发送消息,后面跟receive



我正在测试Rust-libzmq客户端

https://crates.io/crates/libzmq

https://docs.rs/libzmq/0.2.5/libzmq/struct.ClientBuilder.html

偶然发现了这种奇怪的行为。

此客户端不会发送以下消息:

use libzmq::{prelude::*, *, ServerBuilder, ClientBuilder, TcpAddr};
fn main() -> Result<(), String> {

let saddr = format!("{}:{}", "192.168.1.206","5540");
println!("Strating client for {}", saddr);
let addr2: TcpAddr = saddr.try_into().unwrap();

let client = ClientBuilder::new()
.connect(&addr2)
.build().unwrap();
client.send("test").unwrap();
println!("Finished");
Ok(())
}

这将发送:

use libzmq::{prelude::*, *, ServerBuilder, ClientBuilder, TcpAddr};
fn main() -> Result<(), String> {

let saddr = format!("{}:{}", "192.168.1.206","5540");
println!("Strating client for {}", saddr);
let addr2: TcpAddr = saddr.try_into().unwrap();

let client = ClientBuilder::new()
.connect(&addr2)
.build().unwrap();
client.send("test").unwrap();
let mut msg = Msg::new();
client.recv(&mut msg).unwrap();
println!("Finished");
Ok(())
}

对于接收,我使用python服务器(但我也在Rust上进行了测试(:

import zmq
if __name__ == '__main__':
context = zmq.Context()
socket = context.socket(zmq.SERVER)
socket.bind("tcp://0.0.0.0:5540")
print("waiting for hand shake")
m = socket.recv(copy=False)
print("got it...")
socket.send(b'READY', routing_id=m.routing_id)
print("sent reply")
socket.close()
context.term()

来自代码1:的服务器端输出

waiting for hand shake
[blocked]

来自代码2:的服务器端输出

waiting for hand shake
got it...
sent reply

将此版本用于Rust:

[dependencies]
libzmq = "0.2.5"

libzmq机箱只是libzmqC库的包装器。在C库的文档中,您会发现以下注释:

注意:成功调用zmq_msg_send((并不表示消息已传输到网络,只是已在其上排队"套接字"和0MQ已对该消息负责。

在第一个示例中,由于程序在调用send后立即退出,因此消息仍在libzmq队列中,尚未传输。在第二个示例中,当您的程序在recv调用中等待时,消息被传输。

相关内容

最新更新