Skip to content

Commit

Permalink
refactor(websocket): Refactor websocket implementation
Browse files Browse the repository at this point in the history
  • Loading branch information
0x676e67 committed Jan 28, 2025
1 parent 4eefefd commit fee5458
Show file tree
Hide file tree
Showing 8 changed files with 467 additions and 309 deletions.
4 changes: 2 additions & 2 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ full = [
"deflate",
]

websocket = ["dep:async-tungstenite", "tokio-util/compat"]
websocket = ["dep:tokio-tungstenite"]

charset = ["dep:encoding_rs"]

Expand Down Expand Up @@ -147,7 +147,7 @@ tokio-util = { version = "0.7.0", default-features = false, features = [
tokio-socks = { version = "0.5.2", optional = true }

## websocket
async-tungstenite = { version = "0.28.0", optional = true }
tokio-tungstenite = { version = "0.26.0", default-features = false, features = ["handshake"], optional = true }

## hickory-dns
hickory-resolver = { version = "0.24", optional = true }
Expand Down
18 changes: 11 additions & 7 deletions examples/http2_websocket.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
use futures_util::{SinkExt, StreamExt, TryStreamExt};
use http::header;
use rquest::{Client, Impersonate, Message, RequestBuilder};
use rquest::{Client, Impersonate, Message, RequestBuilder, Utf8Bytes};
use std::time::Duration;

#[tokio::main]
Expand All @@ -26,7 +26,7 @@ async fn main() -> Result<(), rquest::Error> {
let websocket = client
.websocket("wss://127.0.0.1:3000/ws")
.configure_request(configure_request)
.http2_only()
.use_http2()
.send()
.await?;

Expand All @@ -36,16 +36,20 @@ async fn main() -> Result<(), rquest::Error> {

tokio::spawn(async move {
for i in 1..11 {
tx.send(Message::Text(format!("Hello, World! #{i}")))
if let Err(err) = tx
.send(Message::Text(Utf8Bytes::from(format!(
"Hello, World! #{i}"
))))
.await
.unwrap();
{
eprintln!("failed to send message: {err}");
}
}
});

while let Some(message) = rx.try_next().await? {
match message {
Message::Text(text) => println!("received: {text}"),
_ => {}
if let Message::Text(text) = message {
println!("received: {text}");
}
}

Expand Down
16 changes: 10 additions & 6 deletions examples/websocket.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
use futures_util::{SinkExt, StreamExt, TryStreamExt};
use http::header;
use rquest::{Client, Impersonate, Message, RequestBuilder};
use rquest::{Client, Impersonate, Message, RequestBuilder, Utf8Bytes};
use std::time::Duration;

#[tokio::main]
Expand Down Expand Up @@ -35,16 +35,20 @@ async fn main() -> Result<(), rquest::Error> {

tokio::spawn(async move {
for i in 1..11 {
tx.send(Message::Text(format!("Hello, World! #{i}")))
if let Err(err) = tx
.send(Message::Text(Utf8Bytes::from(format!(
"Hello, World! #{i}"
))))
.await
.unwrap();
{
eprintln!("failed to send message: {err}");
}
}
});

while let Some(message) = rx.try_next().await? {
match message {
Message::Text(text) => println!("received: {text}"),
_ => {}
if let Message::Text(text) = message {
println!("received: {text}");
}
}

Expand Down
5 changes: 5 additions & 0 deletions src/client/websocket/json.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
use crate::{Error, Message};
use bytes::Bytes;
use serde::{de::DeserializeOwned, Serialize};

use super::Utf8Bytes;

impl Message {
/// Tries to serialize the JSON as a [`Message::Text`].
///
Expand All @@ -15,6 +18,7 @@ impl Message {
#[cfg_attr(docsrs, doc(cfg(feature = "json")))]
pub fn text_from_json<T: Serialize + ?Sized>(json: &T) -> Result<Self, Error> {
serde_json::to_string(json)
.map(Utf8Bytes::from)
.map(Message::Text)
.map_err(Into::into)
}
Expand All @@ -32,6 +36,7 @@ impl Message {
#[cfg_attr(docsrs, doc(cfg(feature = "json")))]
pub fn binary_from_json<T: Serialize + ?Sized>(json: &T) -> Result<Self, Error> {
serde_json::to_vec(json)
.map(Bytes::from)
.map(Message::Binary)
.map_err(Into::into)
}
Expand Down
Loading

0 comments on commit fee5458

Please sign in to comment.