Skip to content

luyikk/kcp_server

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

83 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

kcpserver

Latest Version Rust Documentation Rust Report Card Rust CI

最好用的RUST KCP 服务器框架 (The best rust kcp server framework)

Examples Echo

use kcpserver::prelude::{
    kcp_module::{KcpConfig, KcpNoDelayConfig},
    *,
};
use tokio::io::AsyncReadExt;
use log::LevelFilter;

#[tokio::main]
async fn main() -> anyhow::Result<()> {
    env_logger::Builder::new()
        .filter_level(LevelFilter::Debug)
        .init();

    let mut config = KcpConfig::default();
    config.nodelay = Some(KcpNoDelayConfig::fastest());
    let kcp_server = KcpListener::new("0.0.0.0:5555", config, 10, |peer| async move {
        log::debug!("create kcp peer:{}", peer);
        let mut buf = [0; 1024];
        let mut reader = peer.get_reader();
        let mut writer = peer.get_writer();
        while let Ok(size) = reader.read(&mut buf).await {
            log::debug!("read peer:{} buff:{}", peer, size);    
            //AsyncWrite unable to write data of length 0
            writer.write_all(&buf[..size]).await?;
            writer.flush().await?;
            //or
            //peer.write(&buf[..size]).await?;
            //peer.flush().await?;
        }
        //not mandatory
        writer.shutdown().await?;
        log::debug!("kcp peer:{} closed", peer.to_string());
        Ok(())
    })?;
    kcp_server.start().await?;
    Ok(())
}