Regarding data compression request in CSharp Simplified streaming API

Hi

I am using Csharp MarketPriceExample of EAP (Early Aceess Program) -> TR's Simplified Streaming API. I am aware that we can enable data compression in Simplified API .(i.e. permessage-deflate compression ) . I have a question regarding how we can request compressed data in CSharp MarketPriceExample ?

Look Like CSharp example is using open source websocketsharp dll. I had a look into websocket-sharp dll document for compression here -> https://github.com/sta/websocket-sharp#per-message-compression

i.e.

"As a WebSocket client, if you would like to enable this extension, you should set the WebSocket.Compression property to a compression method before calling the connect method. ws.Compression = CompressionMethod.Deflate;

And then the client will send the following header in the handshake request to the server. Sec-WebSocket-Extensions: permessage-deflate; server_no_context_takeover; client_no_context_takeover "

Anyhow i am not able to set the header while requesting data from simplified streaming ?

Could you please suggest how we can add that compression request part in MarketPriceExample code for Simplified Streaming ?

Best Answer

  • Hi Vaibhav,

    WebSocketSharp only supports compression without a compression context (where compression of previous messages does not affect how future messages are compressed). It therefore includes the 'no-context-takeover' extension parameters in the request.

    The ADS uses a context when sending messages to achieve better compression. Accordingly it does not echo back the request for no-context-takeover. We may add support for compression without a context in a future release.

Answers

  • Hi jim,

    Thanks for your reply. I am interested to see how to add header using websocketSharp in C#.

    so far doing like below

    private WebSocket _webSocket;

    .

    //Creating new websocket

    _webSocket = newWebSocket(hostString, "tr_json2");

    .

    //Setting compression enable

    _webSocket.Compression = CompressionMethod.Deflate;

    .

    //Anyhow not sure how to set header using websocketsharp

    (i.e.

    Sec-WebSocket-Extensions: permessage-deflate; server_no_context_takeover; client_no_context_takeover

    )

    //calling connect later on

    _webSocket.Connect();

  • Hi Vaibhav,

    Could be wrong, but I don't think WebSocketSharp has a way to add custom Websocket extension parameters. WebSocketSharp automatically adds the "no-context-takeover" header when compression is enabled (and then it closes the connection since the ADS did not echo it back).

  • Thanks a lot Jim .. We might raise this with TR to see if they can add compression without a context in a future release