signalr ručně - jak ho správně spustit?

signalr ručně - jak ho správně spustit?
« kdy: 17. 01. 2020, 12:15:30 »
Zdravím. Má tu někdo zkušenost s provozováním signalr klienta na nejnižší úrovni? Bohužel jsem musel implementovat klienta vlastními silami, protože to píšu v C++ pod linuxem a nějak jsem nesehnal vhodnou knihovnu pro můj případ. Potřebuju jen číst data ze streamu po websocketu, přesněji kótace na burze

Mám k dispozici HTTPs klienta a websocket klienta. Nemohu postovat kód, je hodně custom

Scénář
1. pošlu /negotiate
2. dostanu ConnectionToken {TOKEN}
3. otevřu websocket /connect?transport=webSockets&ConnectionToken={TOKEN}&clientProtocol=1.5
4. počkám na obdržení první frame
5. pošlu /start?transport=webSockets&ConnectionToken={TOKEN}&clientProtocol=1.5

Problém? Náhodně (v blocích) cca v 50% se mi nepodaří navázat spojení a napíše to, že mám neplatný ConnectionToken. Tato situace se třeba opakuje pět minut jak to můj software neustále po půl minutě zkouší. Pak to najednou naběhne a vše jede OK. Vzhledem k tomu, že klient pak drží spojení a je happy, nové navazování úž nepokouší, dokud to zase není třeba (spadne spojení nebo musím restartovat).

Hledám chybu ve svém kódu. Jak správně navazovat spojení a kdy přesně vyslat /start? Byl jsem dokonce tak zoufalý, že při selhání /start jej opakuju třeba 3x za sebou po prodlevě. Někdy se chytne až na potřetí což je po cca 10 sekundách. Možná že druhá strana je pomalá s navazováním, že tedy problém není na mé straně. Možná že mám něco hledat v odpovědi websocketu, že nyní je spojení navázáno a mohu ho spustit?


Re:signalr ručně - jak ho správně spustit?
« Odpověď #1 kdy: 20. 01. 2020, 11:59:35 »
A co použít oficiálního c++ klienta
https://github.com/aspnet/SignalR-Client-Cpp

Re:signalr ručně - jak ho správně spustit?
« Odpověď #2 kdy: 20. 01. 2020, 13:21:03 »
Leda že bych se podíval, jak to dělají. Já potřebuju 5% funkcionality nejen samotného protokolu, ale podíl na celé aplikaci je zhruba asi tak malý. A nemám zájem slepovat můj projekt s něčím, co je 2x větší a má 95% kódu který řeší to co již mám vyřešeno jinak

Re:signalr ručně - jak ho správně spustit?
« Odpověď #3 kdy: 20. 01. 2020, 17:04:59 »
Problém vyřešen.

Problém se ukázal v tom, že nezpracovávám cookies. A server si při /negotiate ke klientovi nastavoval cookie "AWSALB", která slouží load balanceru najít správnou instanci při /connect a /start. Takže to náhodně padalo, jak to došlo na různé instance.

Člověk si říká, že tohle by měl přece signalr řešit.