我正在玩时雄WebSocket,我已经启动了from the echo example,并试图改变它。
我尝试做的是解析一个输入消息,从中提取一个数字,然后将相同的消息发送回客户机“n”次。
到目前为止我所做的是:
let (mut write, read) = ws_stream.split();
// We should not forward messages other than text or binary.
read.try_filter(|msg| future::ready(msg.is_text() || msg.is_binary()))
.flat_map(|msg| {
let msg = msg.and_then(Message::into_text);
let times = msg.map(|v| extract(v.as_str()))
.unwrap_or(0);
let txt = msg.unwrap_or("Error".into());
repeat(Ok(Message::Text(txt)))
.take(times)
})
.forward(write)
.await
.expect("Failed to forward messages");
但我得到了错误:
error[E0277]: the trait bound `tokio_tungstenite::tungstenite::Error: Clone` is not satisfied
--> src/main.rs:42:10
|
42 | .flat_map(|msg| {
| ^^^^^^^^ the trait `Clone` is not implemented for `tokio_tungstenite::tungstenite::Error
我对Rust还很陌生,因为Error类型不是我所拥有的,我不知道如何解决这个问题,有没有其他的惯用方法来编写我正在尝试做的事情?
1条答案
按热度按时间z5btuh9x1#
下面的例子使用了一个for循环来发送多条消息,如果你找到了更好的方法,可以打开一个PR
客户端外观
您可以查看完整的工作示例here