#ipc #packets #servo #share #allowing #defined #ipc-channel

packet-ipc

使用 servo ipc 在服务之间共享数据包

14 个重大版本发布

0.15.0 2020 年 12 月 29 日
0.14.0 2020 年 9 月 24 日
0.13.0 2020 年 7 月 2 日
0.9.0 2020 年 2 月 21 日
0.4.0 2019 年 3 月 22 日

#1506异步

Download history 303/week @ 2024-03-11 73/week @ 2024-03-18 286/week @ 2024-03-25 255/week @ 2024-04-01 267/week @ 2024-04-08 374/week @ 2024-04-15 473/week @ 2024-04-22 408/week @ 2024-04-29 274/week @ 2024-05-06 161/week @ 2024-05-13 183/week @ 2024-05-20 125/week @ 2024-05-27 12/week @ 2024-06-03 5/week @ 2024-06-10 61/week @ 2024-06-17

每月 78 次下载
用于 suricata-ipc

MIT 许可协议

13KB
254 代码行

packet-ipc

build status crates.io version docs.rs docs MIT licensed

使用 servo 的 ipc-channel 在进程间共享数据包的库。

在尽可能高效的同时,还允许数据包与 C FFI 一起使用。

对于此库,数据包被定义为任何实现 AsIpcPacket 的结构。

用法

由于客户端将使用服务器名称进行连接,因此必须在创建客户端之前创建服务器。

首先创建一个服务器,并接受一个连接

let server = Server::new().expect("Failed to build server");
let server_name = server.name.clone();
let connection = futures::spawn(server.accept()).expect("No connection formed");

服务器创建后,您可以使用服务器名称创建客户端

let client = Client::new(server_name.clone()).expect("Failed to connect");

此时,您可以向客户端发送数据包

connection.send(Some(packets)).expect("Failed to send");

或告诉客户端您已完成发送数据包

connection.send(None).expect("Failed to send");

并关闭连接

connection.close();

客户端立即可用于使用,并可以使用以下方式接收数据包

let opt_packets = client.receive_packets(size).expect("Failed to receive packets");
if Some(packets) = opt_packets {
    process_packets(packets);
} //else server is closed

向客户端流式传输数据包

一旦建立连接,就可以使用数据包流进行操作

let stream_result = packets_stream.transfer_ipc(connection).collect().wait();

依赖项

~5–15MB
~216K SLoC