#networking #gamedev #bevy #multiplayer-game

aeronet_channel

为aeronet实现的内存MPSC通道传输

11 个不稳定版本 (5 个重大更改)

新功能 0.7.0 2024年8月25日
0.7.0-alpha.22024年8月16日
0.7.0-alpha.12024年7月30日
0.6.0 2024年7月30日
0.1.4 2023年10月9日

##1841 in 游戏开发

Download history 76/week @ 2024-07-06 1/week @ 2024-07-13 226/week @ 2024-07-27 11/week @ 2024-08-03 51/week @ 2024-08-10 56/week @ 2024-08-17

每月下载量:344

MIT/Apache

115KB
1.5K SLoC

aeronet_channel

crates.io docs.rs

使用crossbeam-channel实现MPSC的内存通道传输,是aeronet的内存通道传输实现。

此传输可以在任何环境中使用,包括本地应用程序或WASM,但不能通过网络与其他计算机远程通信。当开发可能支持多玩家的本地单机服务器时,此传输很有用,因为它允许您编写相同的逻辑,而无需关心您连接的服务器是远程还是本地。

入门指南

请参阅aeronet以了解如何使用任何传输。创建一个ChannelServer,该服务器将处理客户端连接。然后创建并连接到一个ChannelClient,该客户端连接到该服务器。您可以通过其状态访问客户端的键,以便以后从服务器断开连接。

use aeronet::{
    client::{ClientTransport, ClientState},
    server::ServerTransport,
    bytes::Bytes,
    lane::LaneIndex,
};
use aeronet_channel::{
    client::ChannelClient,
    server::{ClientKey, ChannelServer},
};

#[derive(Debug, Clone, Copy)]
struct AppLane;

impl From<AppLane> for LaneIndex {
    fn from(_: AppLane) -> Self {
        Self::from_raw(0)
    }
}

let mut server = ChannelServer::new();
server.open().unwrap();
let mut client = ChannelClient::new();
client.connect(&mut server).unwrap();

let msg = Bytes::from_static(b"hi!");
client.send(msg, AppLane).unwrap();

let ClientState::Connected(client_state) = client.state() else {
    unreachable!();
};
let client_key = client_state.key;

server.disconnect(client_key, "app closing");

依赖关系

~1.2–4.5MB
~80K SLoC