< 返回版块

PrivateRookie 发表于 2023-11-08 17:17

Tags:websocket,network,lz77,http

ws-tool 0.10 发布了, 主要内容有

  • 这个版本修复之前的一些bug, autobahn 测试也已回归到之前的通过率
  • 内部api里去掉bytes库依赖, 解析消息时不再进行原子操作, 进一步提升吞吐量
  • message api 现在提供 Cow str 或 &[u8], 某些情况下可以避免之前版本 clone 引入的内存分配, 进一步增加性能
  • 提供了更简单的创建客户端函数, ClientConfig::connect, 通过这个方法即可通过创建自动检测deflate扩展, wss 连接, 自定义buffer大小的客户端.
  • 集成到poem, 对于 server 端, 添加了poem集成, 方便在现有项目下添加 websocket 功能

以下是根据连接 url 获取 echo 前缀的 echo server 例子

#[handler]
async fn test(Path(prefix): Path<String>, req: &poem::Request) -> impl IntoResponse {
    ws_tool::extension::poem_ext::adapt(
        req,
        default_handshake_handler,
        |req, upgraded| async move {
            let mut client = AsyncStringCodec::factory(req, upgraded).unwrap();
            loop {
                let msg = client.receive().await.unwrap();
                if msg.code.is_close() {
                    info!("peer send close: {}", msg.data);
                    break;
                }
                let echo = format!("{}: {}", prefix, msg.data);
                client.send(&echo).await.unwrap()
            }
        },
    )
    .await
}

let app = Route::new().at("/demo/:prefix", get(test));

完整代码可以在 examples/poem 找到


Ext Link: https://github.com/PrivateRookie/ws-tool/tree/main

评论区

写评论

还没有评论

1 共 0 条评论, 1 页