Rust, libzmq, 客户端只发送消息,然后是接收

mu5e

我正在测试 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"
JMB

libzmq箱是只为一个包装libzmq的C库C 库文档中,您会发现以下注释:

注意:zmq_msg_send() 的成功调用并不表示消息已传输到网络,仅表示消息已在“套接字”上排队并且 0MQ 已承担该消息的责任。

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

简单的 Rust TCP 服务器和客户端不接收消息并且永远不会终止

libzmq.dll FileNotFoundException

Android Socket客户端无法发送和接收消息

RabbitMQ:客户端启动之前,客户端不接收发送的消息

在Rust中具有cookie支持的HTTP客户端

如何接收客户端发送的数据

ZeroMQ-从队列接受新客户端之前,先向客户端发送和接收多条消息

在客户端调用shutdown(sockfd,SHUT_RD)之后,为什么客户端程序中的recv()会接收发送到客户端的消息?

Java套接字接收文件,然后将响应发送回客户端

通过Python套接字/ WebSocket客户端发送/接收WebSocket消息

套接字服务器无法接收客户端发送的消息

ActiveMQ从客户端连接之前发送的队列中接收消息

如何使用 Rust VS Code 扩展解决“无法启动客户端 Rust 语言服务器”?

在 UDP 客户端-服务器-客户端实现中,每秒消息都会发送给发送方而不是接收方

使用期货的Rust回声服务器和客户端将永远阻止自己

如何使用Rust Hyper HTTP客户端将请求绑定到特定的网络接口?

使用异步(tokio)rust-websocket在客户端之间共享可变状态

如何将无效的JSON请求主体中的错误描述返回给Rust中的客户端?

高速公路扭曲的Websocket服务器不会向客户端发送消息,除非它从客户端接收到消息

在 MQTT 中,我可以向单个客户端发送消息吗?还是只在一个主题中?

SignalR 客户端不通过 Masstransit 接收消息

ASIO UDP客户端从不接收消息

客户端未在信号器中接收消息

客户端发送SOAP请求并接收响应

C#TCP服务器一次接收到Python客户端发送的两条消息

使用Java的akka websocket,计算客户端数量,向客户端发送消息

向所有客户端发送消息(客户端-服务器通信)

Vscode语言客户端扩展-如何从服务器向客户端发送消息?

Rust无法接收来自C ++的UDP消息