binance_ws_test.rs 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. use tungstenite::client::connect_with_proxy;
  2. use tungstenite::protocol::WebSocketConfig;
  3. use tungstenite::Message;
  4. use std::net::{SocketAddr, IpAddr, Ipv4Addr};
  5. use serde_json::json;
  6. use url::Url;
  7. #[tokio::test]
  8. async fn test() {
  9. let request_url = Url::parse("wss://stream.binance.com:443/ws/btcusdt@depth10@100ms").unwrap();
  10. let proxy_address = SocketAddr::new(IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1)), 9080);
  11. let websocket_config = Some(WebSocketConfig {
  12. max_send_queue: Some(16),
  13. max_message_size: Some(16 * 1024 * 1024),
  14. max_frame_size: Some(16 * 1024 * 1024),
  15. accept_unmasked_frames: false,
  16. });
  17. let max_redirects = 5;
  18. let (mut socket, response) =
  19. connect_with_proxy(request_url, proxy_address, websocket_config, max_redirects)
  20. .expect("Can't connect");
  21. // println!("connected:{}", response.status());
  22. let j = json!({
  23. "method": "SUBSCRIBE",
  24. "params":
  25. [
  26. "btcusdt@depth1@100ms"
  27. ],
  28. "id": 1
  29. });
  30. println!("{}", j.to_string());
  31. socket
  32. .write_message(Message::Text(j.to_string().into()))
  33. .unwrap();
  34. loop {
  35. if !socket.can_read() {
  36. continue;
  37. }
  38. let msg = socket.read_message();
  39. println!("Received msg");
  40. match msg {
  41. Ok(Message::Text(text)) => {
  42. println!("Received text: {}", text);
  43. }
  44. Ok(Message::Binary(bin)) => {
  45. println!("Received binary: {:?}", bin);
  46. }
  47. Ok(Message::Ping(_)) | Ok(Message::Pong(_)) | Ok(Message::Close(_)) => {
  48. socket.write_message(Message::Pong(vec![]))
  49. .unwrap();
  50. println!("ping");
  51. }
  52. Err(error) => {
  53. println!("Error receiving message: {}", error);
  54. break;
  55. }
  56. }
  57. }
  58. socket.close(None).unwrap();
  59. }