#tcp-server #chat #suitable #rooms #client #scan #name

nightly lobby

适用于聊天室和游戏的TCP服务器实现

1 个不稳定版本

使用旧的 Rust 2015

0.0.1 2015年3月20日

#11 in #rooms

10KB
141 行代码(不含注释)

适用于聊天室和游戏的TCP服务器实现。

“lobby”包旨在提供一种方便的方式来启动服务器,该服务器自动跟踪已连接的客户端并提供发送消息和轮询数据的设施。

每个客户端都使用唯一的整数ID表示,当客户端从服务器断开连接时,ID将被回收。

以下是启动“lobby”服务器和轮询客户端数据的示例

extern crate lobby;
use lobby::{Lobby, ScanResult};

let server = Lobby::new("127.0.0.1:8080").unwrap();

loop {
    server.scan(|id, result| {
        let name = server.name(id).unwrap();
        match result {
            ScanResult::Connected => println!("{} has connected.", name),
            ScanResult::Data(data) => println!("{} sent {} bytes of data.", name, data.len()),
            ScanResult::IoError(err) => println!("{} ran into an IO error: {}", name, err),
            ScanResult::Disconnected => println!("{} has disconnected.", name),
        }
    });
}

客户端可以使用 TcpStream::connect() 连接到服务器。客户端在建立连接后应该发送一个UTF-8编码的名称,后跟一个0字节以表示其结束。之后,所有进一步发送的数据都将排队等待服务器扫描。

无运行时依赖