Я использую отличную библиотеку Tokio-Tungstenite для веб-сокета ржавчины, которая является просто версией вольфрамита Tokio.
Я могу легко подключиться к потоку веб-сокетов с помощью метода connect_async, и в потоке веб-сокетов я получаю обратноЯ разделил это следующим образом:
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`
Текущая ошибка также должна быть сделанас аннотациями типов для потока отправки.