binance_ws_test.rs 2.0 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. use std::io::{self, Write};
  8. #[tokio::test]
  9. async fn test() {
  10. let mut stdout = io::stdout();
  11. let mut stderr = io::stderr();
  12. let request_url = Url::parse("wss://stream.binance.com:443/ws").unwrap();
  13. let proxy_address = SocketAddr::new(IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1)), 9080);
  14. let websocket_config = Some(WebSocketConfig {
  15. max_send_queue: Some(16),
  16. max_message_size: Some(16 * 1024 * 1024),
  17. max_frame_size: Some(16 * 1024 * 1024),
  18. accept_unmasked_frames: false,
  19. });
  20. let max_redirects = 5;
  21. let (mut socket, response) =
  22. connect_with_proxy(request_url, proxy_address, websocket_config, max_redirects)
  23. .expect("Can't connect");
  24. let sub_json = json!({
  25. "method": "SUBSCRIBE",
  26. "params":
  27. [
  28. "btcusdt@depth5@100ms"
  29. ],
  30. "id": 1
  31. });
  32. let sub_json_str = sub_json.to_string();
  33. writeln!(stdout, "subscribe info: {:?}", sub_json_str).unwrap();
  34. // 订阅深度信息
  35. socket
  36. .write_message(Message::Text(sub_json_str))
  37. .unwrap();
  38. loop {
  39. if !socket.can_read() {
  40. continue;
  41. }
  42. let msg = socket.read_message();
  43. match msg {
  44. Ok(Message::Text(text)) => {
  45. writeln!(stdout, "{:?}", text).unwrap();
  46. }
  47. Ok(Message::Ping(_)) | Ok(Message::Pong(_)) | Ok(Message::Close(_)) => {
  48. socket.write_message(Message::Pong(vec![]))
  49. .unwrap();
  50. writeln!(stdout, "ping----------pong").unwrap();
  51. }
  52. Err(error) => {
  53. writeln!(stderr, "Error receiving message: {}", error).unwrap();
  54. break;
  55. }
  56. _ => {}
  57. }
  58. }
  59. socket.close(None).unwrap();
  60. }