#tcp #tokio #networking #async #gamedev

已删除 锥度

一个简单易用的基于 TCP 数据包的网络通信库

0.2.4 2021年3月4日
0.2.3 2021年3月4日
0.1.0 2021年3月3日

#323#tcp

MIT 协议

21KB
298

锥度

锥度是一个为简化基于数据包的网络通信而制作的 Rust 库。

异步

锥度支持使用 async 功能进行异步使用。启用后,锥度将使用 Tokio 来并行执行所有数据包监听器。如果禁用,则使用 OS 线程

尽管这可能对客户端来说有点过度,但这可能对服务器来说是一个巨大的性能提升。

文档和用法

文档

贡献

欢迎提交拉取请求。对于重大更改,请首先创建一个问题来讨论您想进行的更改。

许可证

MIT


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