大家好, ws-tool 项目 0.3.0 版本发布了, ws-tool 是一个基于 tokio 的 rust websocket 库, 你可以用它来创建客户端或服务端. 相比于 0.2 版本, 0.3 对接口进行了重构, 使其更方便使用. 目前提供功能有
- http/socks5 代理支持
- client/server 支持
- 支持获取的消息类型包括最底层的websocket frame(数据包), BytesMut(二进制数据)和 String(最常用类型)
- 支持类似与 tcpstream 一样的 split 方法, 将 websocket 连接切成 readable 和 writeable, 充分利用 websocket 全双工的特性
- 支持自定义client/server协议握手处理方法, 你可以在这些方法里处理握手请求header, 返回特定消息Codec
- 支持自定义 Encoder/Decoder, 方便将数据直接转化成期望的数据类型
- 标准 autobahn test suit client 测试用例通过率 90%+
example
客户端例子, 来自 echo 省略准备的代码, 创建一个 websocket 代码如下
let mut builder = ClientBuilder::new(&args.uri);
if let Some(cert) = args.cert {
builder = builder.cert(cert);
}
if let Some(proxy) = args.proxy {
builder = builder.proxy(&proxy)
}
let mut client = builder
.connect_with_check(default_string_check_fn)
.await
.unwrap();
while let Some(Ok((_, msg))) = client.next().await {
// read write message here
}
服务端例子, 来自server 同样省略了一些准备代码
for (stream, addr) in listener.accept().await {
tracing::info!("got connect from {:?}", addr);
let mut server = ServerBuilder::accept(
stream,
default_handshake_handler,
default_string_codec_factory,
)
.await
.unwrap();
while let Some(Ok((code, msg))) = server.next().await {
if code == OpCode::Close {
break;
}
server.send(msg).await.unwrap();
}
使用代理的例子可以参考 binance
split 客户端的例子可以参考 split_binance
欢迎提issue或PR
Ext Link: https://privaterookie.github.io/ws-tool/
1
共 1 条评论, 1 页
评论区
写评论rust的异步ws库都不支持 permessage-deflate,你这个要是能支持就好了