Retrieving Data from the GDAX Web Sockets Root Directory

I want to get data from this wss: //ws-feed.gdax.com

I don't know anything about websocket. I am reading several manuals and it uses terms such as websocket server, TCP, etc., which I have no idea about. Can anyone advise how I should continue, how to write C # code to get the data from the above.

This is the document I am reading to receive real-time data - https://docs.gdax.com/#websocket-feed

Let's start by creating an application window. Read here that the WebSocketSharp library can be used to connect WebSockets, so it has been installed and is still written:

using (var ws = new WebSocket("wss://ws-feed.gdax.com")) { ws.Connect(); string json = "{\"type\": \"subscribe\", \"product_ids\": [\"BTC-USD\"]}"; ws.Send(json); //gives error -Function evaluation disabled because a previous function evaluation timed out. You must continue execution to reenable function evaluation. } 

Any help would be greatly appreciated.

+5
source share
2 answers
 ClientWebSocket socket = new ClientWebSocket(); Task task = socket.ConnectAsync(new Uri("wss://ws-feed.gdax.com"), CancellationToken.None); task.Wait(); Thread readThread = new Thread( delegate(object obj) { byte[] recBytes = new byte[1024]; while (true) { ArraySegment<byte> t = new ArraySegment<byte>(recBytes); Task<WebSocketReceiveResult> receiveAsync = socket.ReceiveAsync(t, CancellationToken.None); receiveAsync.Wait(); string jsonString = Encoding.UTF8.GetString(recBytes); Console.Out.WriteLine("jsonString = {0}", jsonString); recBytes = new byte[1024]; } }); readThread.Start(); string json = "{\"product_ids\":[\"btc-usd\"],\"type\":\"subscribe\"}"; byte[] bytes = Encoding.UTF8.GetBytes(json); ArraySegment<byte> subscriptionMessageBuffer = new ArraySegment<byte>(bytes); socket.SendAsync(subscriptionMessageBuffer, WebSocketMessageType.Text, true, CancellationToken.None); Console.ReadLine(); 
+5
source

Basically, you are doing it in the right direction. Just check the status of the websocket before reading the message.

Below is an example of https://github.com/sefbkn/gdax.netcore with a slight modification

 var webSocketClient = new ClientWebSocket(); var cancellationToken = new CancellationToken(); await webSocketClient.ConnectAsync(new Uri("wss://ws-feed.gdax.com"), cancellationToken).ConfigureAwait(false); if (webSocketClient.State == WebSocketState.Open) { var requestString = JsonConvert.SerializeObject(new { type = "subscribe", product_ids = new[]{"ETH-EUR"}, channels = new[]{"ticker"} }); var requestBytes = UTF8Encoding.UTF8.GetBytes(requestString); var subscribeRequest = new ArraySegment<byte>(requestBytes); var sendCancellationToken = new CancellationToken(); await webSocketClient.SendAsync(subscribeRequest, WebSocketMessageType.Text, true, sendCancellationToken).ConfigureAwait(false); while (webSocketClient.State == WebSocketState.Open) { var receiveCancellationToken = new CancellationToken(); using(var stream = new MemoryStream(1024)) { var receiveBuffer = new ArraySegment<byte>(new byte[1024*8]); WebSocketReceiveResult webSocketReceiveResult; do { webSocketReceiveResult = await webSocketClient.ReceiveAsync(receiveBuffer, receiveCancellationToken).ConfigureAwait(false); await stream.WriteAsync(receiveBuffer.Array, receiveBuffer.Offset, receiveBuffer.Count); } while(!webSocketReceiveResult.EndOfMessage); var message = stream.ToArray().Where(b => b != 0).ToArray(); messageReceived(Encoding.ASCII.GetString(message, 0, message.Length)); } } } 
0
source

Source: https://habr.com/ru/post/1268429/


All Articles