Bästa sättet att läsa av Feed i C#. Använder ett Web MVC 5 projekt.

Added by Oscar about 4 years ago

Hej,

Har använt ert API till och från under ett längre tag nu men fortfarande inte hittat ett optimalt sätt att läsa er feed kontinuerligt.

Jag använder mig av ett C# MVC 5 projekt för att kunna presentera och ändra feeden i en webbläsare.

För att läsa och skriva till feeden använder jag mig av SslTcpClient från MSDN-exemplet.

https://msdn.microsoft.com/en-us/library/system.net.security.sslstream.aspx

I min nuvarande lösning så skickar jag med ett förväntat värde när jag läser av feeden och returnerar sedan strängen som motsvarar mitt förväntade värde och konverterar det till ett C#-objekt med hjälp av JsonConvert.DeserializeObject. Vill jag exempelvis ha ut orderdjup för Ericsson så skickar jag in följande sträng:

{"cmd":"subscribe", "args":{"t":"depth", "i":"101", "m":11}}

och sedan läser jag av responsen från feeden och förväntar mig ett värde som börjar med:

{"type":"depth","data":{"i":"101","m":11

Det här fungerar men det känns långt ifrån optimalt och när applikationen varit igång ett tag kan applikationen bli väldigt ostabil. Hur har ni andra här på forumet löst feeden? Finns det någon här som också presenterar data i ett webbgränssnitt eller alla kör desktop-applikationer? Hur har ni gått tillväga för att läsa och skriva till feeden på bästa sätt? Jag har haft funderingar på en bakgrundsprocess, exempelvis Hangfire och att sedan skicka ut data via SignalR till min klient/klienter men inte kommit överens med mig själv hur detta görs på bästa sätt.


Replies (6)

RE: Bästa sättet att läsa av Feed i C#. Använder ett Web MVC 5 projekt. - Added by Oscar about 4 years ago

Jag har även upplevt ett problem att svaret från servern ibland inte är ett fullständigt objekt. Till exempel kan responsen från servern vara både den övre och den undre strängen nedan under samma sekund. Vad beror detta på?

{"type":"depth","data":{"i":"4870","m":11,"tick_timestamp":1439894878853,"ask_volume4":11959,"ask_orders4":24}}

{"type":"depth","data":{"i":"4870","m":11,"tick_timestamp":1439894872763,"bid1":244.00,"bid_volume1":5749,"bid_orders1":8,"ask1":244.50,"ask_volume1":3280,"ask_orders1":5,"bid2":243.50,"bid_volume2":10359,"bid_orders2":4,"ask2":245.00,"ask_volume2":7514,"ask_orders2":9,"bid3":243.00,"bid_volume3":12371,"bid_orders3":10,"ask3":245.50,"ask_volume3":13688,"ask_orders3":9,"bid4":242.50,"bid_volume4":8156,"bid_orders4":2,"ask4":246.00,"ask_volume4":11709,"ask_orders4":23,"bid5":242.00,"bid_volume5":9279,"bid_orders5":4,"ask5":246.50,"ask_volume5":2331,"ask_orders5":6}}

RE: Bästa sättet att läsa av Feed i C#. Använder ett Web MVC 5 projekt. - Added by Lars about 4 years ago

Jag har även upplevt ett problem att svaret från servern ibland inte är ett fullständigt objekt.

beror antagligen på (se feed-dokumentationen):

"In price, depth and indicator messages only changed fields and identification of the entity is sent."

dvs, det är inte ett problem med feeden utan en "feature" som behöver hanteras i din ände.

RE: Bästa sättet att läsa av Feed i C#. Använder ett Web MVC 5 projekt. - Added by Marcus about 4 years ago

Hur menar du med att applikationen blir ostabil efter ett tag?

Kör själv C# och tycker det fungerat bra hittills. Kör 1-2 Tasks i bakgrunden som sköter all form av avlyssning och sedan skickar vidare detta till mitt GUI.

Provat både WFA och WPF men gått över till WPF på senare tid så jag kan utnyttja XAML. Kanske övergår till ett webbgränssnitt efter ett tag men det viktiga är att allt fungerar bra på datorn som ska sköta ditt program först.

//Marcus

RE: Bästa sättet att läsa av Feed i C#. Använder ett Web MVC 5 projekt. - Added by Oscar about 4 years ago

Tack för info Lars.

Marcus jag tänker mig att all logik ska ske server-side. Jag har inte lyckats hitta ett bra sätt att kontinuerligt läsa feeden, kunna modifiera vad jag ska prenumerera på och samtidigt skicka ut detta till ett gränssnitt. Min nuvarande tanke ligger i att använda mig av Hangfire för ett bakgrundsjobb och sedan SignalR för att pusha ut förändringar till klienter. Får man fråga lite mer exakt hur din lösning ser ut?

RE: Bästa sättet att läsa av Feed i C#. Använder ett Web MVC 5 projekt. - Added by Marcus about 4 years ago

Server-side som på en av dina egna servrar?

Jag har aldrig använt mig av Hangfire eller SignalR. Har byggt upp ett eget GUI i XAML. Har listor/hashmaps med marknader och värdepapper. Kör en tråd som konstant sitter och lyssnar på feeden. Kommer det in nytt material tar tråden hand om detta och uppdaterar alla nödvändiga värden/parametrar. Skulle det behövas skapas nya trådar som sköter mer bakgrundsarbete, så jag konstant har GUI-tråden ledig för alla knapptryckningar osv.

Logiken försöker jag också köra på separata trådar om möjligt. Föredrar Tasks framför BackgroundWorkers, men det är lite av preferens. Då allting skapas på GUI-tråden får du köra någon form av Invoke om du vill ha access till dina andra controlers när du väl är på en annan tråd och kör.

//Marcus

RE: Bästa sättet att läsa av Feed i C#. Använder ett Web MVC 5 projekt. - Added by Oscar about 4 years ago

Yes på egen server.

Okok jag har fått igång det att fungera helt OK nu. Skippade Hangfire och kör istället en Singleton-instans på en egen tråd (Task), när den tar emot ett meddelande så pushar den ut informationen till anslutna klienter via SignalR. Ett smidigt sätt tycker jag ändå för att köra appen i IIS och kunna administrera allt via webbläsare.

(1-6/6)