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
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