4 个版本

0.1.3 2021 年 3 月 22 日
0.1.2 2021 年 3 月 21 日
0.1.1 2021 年 3 月 21 日
0.1.0 2021 年 3 月 21 日

#23 in #tcp-client

MIT 许可证

18KB
303

srve

srve 允许你在服务器客户端模型中创建简单的网络通信,服务器管理多个客户端连接,每个连接都有自己的状态,你可以通过消息与它们通信。

服务器使用后台线程监听新的连接。

客户端

创建客户端时,我们指定将使用的消息。

#[derive(Serialize, Deserialize)]
struct Msg {
    Hello,
    Goodbye,
}

/* on main */
let c = Client::connect(addr)?;

然后我们可以发送和接收消息

c.send(Msg::Hello)?;
match c.recv()? {
    Msg::Hello => { ... }
    Msg::Goodbye => { ... }
}

最后关闭客户端

c.close()?;

服务器

创建服务器时,我们只需指定要使用的消息和表示连接的状态。

struct State {
    value: i32,
}

/* on main */
let s = Server<State, Msg>::bind(addr)?;

然后可以设置不同目的的回调函数,如处理新连接或新消息,之后可以启动服务器。

s
    .on_connection(|conn| {})
    .on_message(|conn, msg| {
        // we can directly access the connection state
        conn.value += 1;
        // and also use connection methods
        conn.send(Msg::Goodbye).unwrap();
    })
    ( /* other callbacks, more in the docs */ )
    .run();

示例

你可以通过运行 cargo run --example server 和然后在不同的(或多个)终端中运行 cargo run --example client 来尝试示例代码,然后写入命令与服务器交互。

还有一个 broken.rs 示例,我用它来测试服务器如何与“损坏”的客户端交互,例如意外关闭或发送错误消息等。

依赖项

~380–670KB
~15K SLoC