0.2.4 |
|
---|---|
0.2.3 |
|
0.1.0 |
|
#323 在 #tcp
21KB
298 行
锥度
锥度是一个为简化基于数据包的网络通信而制作的 Rust 库。
异步
锥度支持使用 async
功能进行异步使用。启用后,锥度将使用 Tokio 来并行执行所有数据包监听器。如果禁用,则使用 OS 线程
尽管这可能对客户端来说有点过度,但这可能对服务器来说是一个巨大的性能提升。
文档和用法
贡献
欢迎提交拉取请求。对于重大更改,请首先创建一个问题来讨论您想进行的更改。
许可证
lib.rs
:
锥度
简单易用的 TCP、基于数据包的网络通信
异步
锥度支持使用 async
功能进行异步使用。启用后,锥度将使用 Tokio 来并行执行所有数据包监听器。如果禁用,则使用 OS 线程
尽管这可能对客户端来说有点过度,但这可能对服务器来说是一个巨大的性能提升。
示例
服务器示例
use taper::{Server, ServerEvent, SocketEvent};
// Try to bind server for listening on localhost and port 1234 using u32 packets
let server = Server::<u32, u32>::bind("127.0.0.1:1234").expect("Could not bind the server");
// Wait for the connection of a single socket
let socket = match server.event_receiver().recv().unwrap() {
ServerEvent::Socket(socket) => socket,
ServerEvent::IoError(e) => panic!(e),
};
let packet = match socket.event_receiver().recv().unwrap() {
SocketEvent::Packet(packet) => packet,
SocketEvent::InvalidPacket => panic!("Received an invalid packet"),
SocketEvent::IoError(e) => panic!(e),
};
// Print the first packet received
// With the client example below this would print 10
println!("Received {} from the remote socket !", packet);
// Reply to the socket
// 11 with the client example
socket.packet_sender().send(packet + 1).unwrap();
客户端示例
use taper::{Socket, SocketEvent};
// Connect to localhost server using u32 packets
let socket = Socket::<u32, u32>::connect("127.0.0.1:1234").expect("Could not connect to local server");
// Send the value '10'
socket.packet_sender().send(10).unwrap();
// Wait for a response packet
let response_packet = match socket.event_receiver().recv().unwrap() {
SocketEvent::Packet(packet) => packet,
SocketEvent::InvalidPacket => panic!("Received an invalid packet"),
SocketEvent::IoError(e) => panic!(e),
};
// With the server example above this would be '11'
println!("Received the value '{}' from the server", response_packet);
依赖
~0.5–9MB
~77K SLoC