【发布时间】:2019-09-29 10:32:21
【问题描述】:
我正在使用优秀的 rust websocket 库 tokio-tungstenite,它只是 tungstenite 的 tokio 版本。
我可以使用 connect_async 方法轻松连接到 websocket 流,在返回的 websocket 流中,我将其拆分如下:
connect_async(url).and_then(move |(ws_stream, _)| {
let (sink, stream) = ws_stream.split();
我可以使用这样的发送消息轻松地向接收器发送一条消息:
sink.send(tungstenite::Message::Text("my message".to_string()))
.map_err(|e| ())
.wait();
这只是一个人为的例子。我的问题是我想向接收器发送消息流,我了解到最好使用 send_all 方法来完成。我的尝试是:
let my_messsages : Vec<tungstenite::Message> = vec![
tungstenite::Message::Text("message_1".to_string()),
tungstenite::Message::Text("message_2".to_string()) ];
let send_stream: tokio_tungstenite::WebSocketStream
<tokio_tungstenite::tungstenite::Message>
= futures::stream::iter_ok(my_messages);
sink.send_all(stream).map_err(|e| ()).wait();
但它不起作用,因为 futures::stream::iter_ok 不是构造我需要的流的正确方法,这是我卡住的地方,无法从文档中看到如何继续。
编辑:最初我没有为 send_stream 指定类型注释,它给了我这个错误:
type annotations needed for `futures::stream::iter_ok::IterOk
<std::vec::IntoIter<tungstenite::protocol::message::Message>, E>`
cannot infer type for `E`
当前错误也与发送流的类型注释有关。
【问题讨论】:
-
一条错误消息真的很有帮助,就像 MCVE 一样。我发现了您的问题,但 实际 错误/输出而不是人工翻译会为我节省 10 分钟。
-
@SébastienRenauld 我很抱歉。感谢您的输入,我会相应地更新问题。
标签: rust