3个版本

1.8.0-beta.32024年6月1日
1.8.0-beta.22024年5月31日

WebSocket中排名第61

Download history 356/week @ 2024-05-29 22/week @ 2024-06-05 13/week @ 2024-06-12

每月下载69

BSL-1.0许可证

68KB
1.5K SLoC

nng-c

Actions Status Crates.io Documentation

nng的高阶绑定。

版本与C库对应

功能

  • http - 启用http传输
  • tls - 启用TLS传输
  • websocket - 启用websocket传输。隐含http功能。
  • log - 通过log crate启用日志记录

用法

客户端和服务器通信的基本示例

use nng_c::{options, Socket, Message, ErrorCode};

use core::time;

//Feel free to append zero char to avoid unnecessary allocations
const ADDR: &str = "ipc://nng-c-example\0";
const REQ_TIMEOUT: options::Req = options::Req {
     resend_time: Some(time::Duration::from_millis(50)),
     resend_tick: Some(time::Duration::from_millis(1)),
};

fn server() -> Result<(), ErrorCode> {
    let server = Socket::rep0()?;
    server.listen(ADDR.into()).expect("listen");

    loop {
        let msg = server.recv_msg()?;
        let body = msg.body();
        let msg = core::str::from_utf8(body).expect("utf-8 bytes");
        match msg {
            "quit" => break Ok(()),
            other => {
                println!("Received bytes(len={})={:?}", other.len(), other);
            }
        }
    }
}

let server = std::thread::spawn(server);

//Wait for thread to spin
std::thread::sleep(time::Duration::from_millis(10));

let client = Socket::req0().expect("Create client");
client.set_opt(REQ_TIMEOUT).expect("Set options");

client.connect(ADDR.into()).expect("connect");

let mut msg = Message::new().expect("create message");
msg.append("ping".as_bytes()).expect("Input bytes");
client.send_msg(msg).expect("send message");

let mut msg = Message::new().expect("create message");
msg.append("quit".as_bytes()).expect("Input bytes");
client.send_msg(msg).expect("send quit");

server.join().expect("Finish server successfully");

依赖项

~7.5MB
~176K SLoC