BTCStorage
Ensign
- Registriert
- Mai 2020
- Beiträge
- 166
Ich probiere seit paar Tagen mit Websockets etwas zu bauen, aber ich bin im Moment nicht so zu frieden mit Websockets.
Wahrscheinlich liegt es auch daran das ich nicht viel Erfahrung habe mit Websockets oder vielleicht sind Websockets auch allgemein so gebaut, bisjen problematisch sage ich mal, ich probiere mal zu erklaeren was ich fuer Probleme mit Websockets habe.
1. Ich probiere zum Beispiel fuer verschiedene Crypto Currency ein Datenstream zu erhalten, das geht alles erstmal auch ganz einfach, mit folgendem Code sende ich eine Anfrage und erhalte auch nach wenigen Sekunden eine Verbindung:
Soweit funktioniert alles erst mal ganz einfach. Wenn ich jetzt aber zum Beispiel fuer Bitcoin 5 verschiedene Candelstick Perioden erhalten will und das gleiche fuer vielleicht 10 andere Crypto Currencys, dann sende ich circa 50 mal eine Anfrage und habe dann circa 50 Streams offen. Nun passiert es aber hin und wieder auch das ein Streams von alleine aufhoert, damit der wieder startet muss man ja erst mal wissen welcher Stream genau aufgehoert hat und dann wahrscheinlich fuer diesen eine neue Verbindungsanfrage senden.
Und hier faengt auch mein erstes Problem an, ich weis gar nicht wie man heraus finden soll welcher Stream genau aufgehoert hat, es gibt zwar eine Variable welche "readyState" heist und diese soll so zu sagen einen die Info geben koennen ob die Verbindung noch offen ist, aber woher soll ich wissen welcher Stream mit "readyState" gemeint ist, es steht ja nichts weiteres dazu ob das der Bitcoin Stream ist oder Ethereum usw, ich bekomme ja einfach nur eine Nummer von "readyState" und habe aber circa 50 mal eine Verbindung fuer verschiedene Streams gesendet:
Wenn man also erst mal hier genau unterscheiden kann welcher Stream gestoptt hat dann koennte man auch wieder eine neue Verbindungsanfrage senden.
2. Dann habe ich auch noch etwas bemerkt, irgendwie steigt der Arbeitsspeicher verbrauch mit der Zeit wenn ich dieses Experiment mit Websockets mache, ich vermute das es vielleicht daran liegt das der Aufruf "const ws = new WebSocket(adress);" immer etwas mehr Arbeitsspeicher kostet, weil dort vielleicht immer durch Erstellen eines Objekts mehr Arbeitsspeicher verbraucht wird, aber naja die Logik ist auch bisjen komisch, die Konstante heist ja immer gleich "ws" aber ein anderen Weg wie ich eine Anfrage zum ebsocket sende habe ich noch nicht gefunden.
Also generell scheint der PC mit der Zeit immer mehr Arbeitsspeicher zu verbrauchen, wenn ich das so auf ein VPS Server laufen lasse, dann ist der VPS Server immer nach paar Stunden nicht mehr erreichbar und man mus ihn neu starten.
Es wuerde mich mal interissieren wie andere Leute das sehen, seit Ihr zufrieden mit Websockets? Sieht jemand Fehler in meiner Vorgehensweise und eine professionellere Weise wie man so circa 50 Streams anfraget und genau ueberpruefen kann welche Streams stoppen damit man die neu anfraegt?
Im Moment benutze ich die ganz einfache HTTP GET Anfrage zur Binance API, damit kann man auch Candelstick Daten bekommen und zwar ohne so viel Probleme, aber mit Ratelimits.
Wahrscheinlich liegt es auch daran das ich nicht viel Erfahrung habe mit Websockets oder vielleicht sind Websockets auch allgemein so gebaut, bisjen problematisch sage ich mal, ich probiere mal zu erklaeren was ich fuer Probleme mit Websockets habe.
1. Ich probiere zum Beispiel fuer verschiedene Crypto Currency ein Datenstream zu erhalten, das geht alles erstmal auch ganz einfach, mit folgendem Code sende ich eine Anfrage und erhalte auch nach wenigen Sekunden eine Verbindung:
Javascript:
// Stream anfragen
let adress = 'wss://stream.binance.com:9443/ws/btcusdt@kline_1h';
const ws = new WebSocket(adress);
// Stream erhalten
ws.on('message', function incoming(data)
{
const obj = JSON.parse(data);
});
Soweit funktioniert alles erst mal ganz einfach. Wenn ich jetzt aber zum Beispiel fuer Bitcoin 5 verschiedene Candelstick Perioden erhalten will und das gleiche fuer vielleicht 10 andere Crypto Currencys, dann sende ich circa 50 mal eine Anfrage und habe dann circa 50 Streams offen. Nun passiert es aber hin und wieder auch das ein Streams von alleine aufhoert, damit der wieder startet muss man ja erst mal wissen welcher Stream genau aufgehoert hat und dann wahrscheinlich fuer diesen eine neue Verbindungsanfrage senden.
Und hier faengt auch mein erstes Problem an, ich weis gar nicht wie man heraus finden soll welcher Stream genau aufgehoert hat, es gibt zwar eine Variable welche "readyState" heist und diese soll so zu sagen einen die Info geben koennen ob die Verbindung noch offen ist, aber woher soll ich wissen welcher Stream mit "readyState" gemeint ist, es steht ja nichts weiteres dazu ob das der Bitcoin Stream ist oder Ethereum usw, ich bekomme ja einfach nur eine Nummer von "readyState" und habe aber circa 50 mal eine Verbindung fuer verschiedene Streams gesendet:
Javascript:
if(ws.readyState==3)
{
//also sagen wir die Verbindung ist geschlossen, ok unf welche Verbinung welche Crypto Currency welche Periode usw?
/*
0 CONNECTING Der Socket wurde erstellt, jedoch besteht noch keine Verbindung.
1 OPEN Eine Verbindung wurde hergestellt und kann zur Kommunikation genutzt werden.
2 CLOSING Die Verbindung wird beendet.
3 CLOSED Die Verbindung wurde geschlossen oder konnte nicht geöffnet werden.
*/
}
Wenn man also erst mal hier genau unterscheiden kann welcher Stream gestoptt hat dann koennte man auch wieder eine neue Verbindungsanfrage senden.
2. Dann habe ich auch noch etwas bemerkt, irgendwie steigt der Arbeitsspeicher verbrauch mit der Zeit wenn ich dieses Experiment mit Websockets mache, ich vermute das es vielleicht daran liegt das der Aufruf "const ws = new WebSocket(adress);" immer etwas mehr Arbeitsspeicher kostet, weil dort vielleicht immer durch Erstellen eines Objekts mehr Arbeitsspeicher verbraucht wird, aber naja die Logik ist auch bisjen komisch, die Konstante heist ja immer gleich "ws" aber ein anderen Weg wie ich eine Anfrage zum ebsocket sende habe ich noch nicht gefunden.
Also generell scheint der PC mit der Zeit immer mehr Arbeitsspeicher zu verbrauchen, wenn ich das so auf ein VPS Server laufen lasse, dann ist der VPS Server immer nach paar Stunden nicht mehr erreichbar und man mus ihn neu starten.
Es wuerde mich mal interissieren wie andere Leute das sehen, seit Ihr zufrieden mit Websockets? Sieht jemand Fehler in meiner Vorgehensweise und eine professionellere Weise wie man so circa 50 Streams anfraget und genau ueberpruefen kann welche Streams stoppen damit man die neu anfraegt?
Im Moment benutze ich die ganz einfache HTTP GET Anfrage zur Binance API, damit kann man auch Candelstick Daten bekommen und zwar ohne so viel Probleme, aber mit Ratelimits.