#tcp-client #tcp-server #tcp #callback #server-client #cbsk #sockets

cbsk_socket_rayon

由 rayon 实现的 socket 回调工具

1 个稳定版本

新版本 2.0.0 2024年8月21日

#763 in 异步


用于 cbsk_rayon

MIT/Apache

79KB
1.5K SLoC

cbsk_socket 是一个 socket 回调工具
您可以使用 cbsk_socket 创建 TCP/WebSocket 服务器或客户端,您不需要关注 TCP/WebSocket 的读写,只需关注业务处理即可

最低支持的 Rust 版本

Rust 1.80.0

现在支持的套接字

  • tcp 客户端 √
  • tcp 服务器 √

tcp 服务器示例

tcp 服务器示例

Cargo.toml 文件

fast_log = "1.7.3"
cbsk_base = "2.0.0"
cbsk_socket_rayon = { version = "2.0.0", default-features = false, features = ["tcp_server"] }

main.rs 文件

use std::net::{IpAddr, SocketAddr};
use std::sync::Arc;
use std::thread;
use std::time::Duration;
use cbsk_base::log;
use cbsk_base::log::LevelFilter;
use cbsk_socket_rayon::cbsk_socket::tcp::server::config::TcpServerConfig;
use cbsk_socket_rayon::tcp::common::tcp_write_trait::TcpWriteTrait;
use cbsk_socket_rayon::tcp::server::callback::TcpServerCallBack;
use cbsk_socket_rayon::tcp::server::client::TcpServerClient;
use cbsk_socket_rayon::tcp::server::TcpServer;

pub fn main() {
    fast_log::init(fast_log::config::Config::default().level(LevelFilter::Info).console()).unwrap();
    let addr = SocketAddr::new(IpAddr::from([127, 0, 0, 1]), 8080);
    let conf = TcpServerConfig::new("".into(), addr, false);
    let tcp_server = TcpServer::new(conf.into(), Cb {});
    tcp_server.start();

    loop {
        thread::sleep(Duration::from_secs(1));
    }
}

struct Cb {}

impl TcpServerCallBack for Cb {
    fn recv(&self, bytes: Vec<u8>, client: Arc<TcpServerClient>) -> Vec<u8> {
        log::info!("recv is {bytes:?}");
        client.send_bytes(b"hello client");
        Vec::with_capacity(1)
    }
}

tcp 客户端示例

tcp 客户端示例

Cargo.toml 文件

fast_log = "1.7.3"
cbsk_base = "2.0.0"
cbsk_socket_rayon = "2.0.0" 

main.rs 文件

use std::net::{IpAddr, SocketAddr};
use std::sync::LazyLock;
use std::thread;
use std::time::Duration;
use cbsk_base::log;
use cbsk_base::log::LevelFilter;
use cbsk_socket_rayon::cbsk_socket::config::re_conn::SocketReConn;
use cbsk_socket_rayon::cbsk_socket::tcp::client::config::TcpClientConfig;
use cbsk_socket_rayon::tcp::client::callback::TcpClientCallBack;
use cbsk_socket_rayon::tcp::client::TcpClient;
use cbsk_socket_rayon::tcp::common::tcp_write_trait::TcpWriteTrait;

#[allow(non_upper_case_globals)]
static addr: LazyLock<SocketAddr> = LazyLock::new(|| { SocketAddr::new(IpAddr::from([127, 0, 0, 1]), 8080) });

#[allow(non_upper_case_globals)]
static tcp_client: LazyLock<TcpClient> = LazyLock::new(|| {
    let conf = TcpClientConfig::new("tcp client".into(), *addr, SocketReConn::enable(Duration::from_secs(3)));
    TcpClient::new(conf.into(), Cb {})
});

pub fn main() {
    fast_log::init(fast_log::config::Config::default().level(LevelFilter::Info).console()).unwrap();
    tcp_client.start();

    loop {
        thread::sleep(Duration::from_secs(1));
    }
}

struct Cb {}

impl TcpClientCallBack for Cb {
    fn conn(&self) {
        tcp_client.send_bytes(b"hello server");
    }

    fn recv(&self, bytes: Vec<u8>) -> Vec<u8> {
        log::info!("bytes is {bytes:?}");
        tcp_client.send_bytes(b"hello server");
        Vec::with_capacity(1)
    }
}

依赖项

~3–10MB
~108K SLoC