Přechod na ReatcJs a websockety

ondrej256
Člen | 187
+
0
-

Zdravím,

mám aplikaci v nette a v ní objednávací formulář. Formulář je už velice komplikovaný a obsahuje spoustu podmínek kdy se má jak zachovat. Například některé prvky skrývám přidávám, měním validační pravidla podle zadaných hodnot, v rámci formuláře mám další vyhledávácí formulář, který se zobrazuje v modalu a po vybrání vyhledaných dat vepíše hodnotu do objednávacího formuláře apod.

Nyní je to udělané způsobem ajaxových reloadů. Tzn. změním hodnotu v selectboxu, tak se formulář odešle na server podle hodnoty se inicializuje formulář znovu a překreslím snippet. Což je v praxi strašně pomalé protože takřka při každé změně uživatel čeká 2 vteřiny než se mu překreslí formulář.

Vydal jsem se moderní cestou javascriptové knihovny React se kterou jsem doposud neměl žádné zkušenosti. Formulář mám již předělaný do reactu a je to teď velmi rychlé. Výsledná data pro vyhledávací formulář tahám přes REST API.

Při každém requestu do REST API si musí aplikace projít celým životním cyklem a teprve potom pošle data.

Na projektu mám rozběhnuty websockety přes knihovnu ipub/websockets-wamp . Je dobrý nápad použít na tahání dat do javascriptu (reactu) websockety? Konkrétně tedy myslím vyhledávací formulář, kde uživatel zadá název produktu a pod formulářem se zobrazí výsledky.

Když se ale podívám na example javascriptového použití, tak po zavolání publish nemám možnost získat odpověď ze serveru.

var webSocket = IPub.WebSockets.WAMP.initialize('ws://127.0.0.1:8080');
webSocket.on('socket/connect', function(session){

    // The callback function in "subscribe" is called everytime an event is published in that channel.
    session.subscribe("acme/channel", function(uri, payload){
        console.log("Received message", payload.msg);
    });

    session.publish('your/channel', 'This is a message!');
})

Jde odpověď nějak získat a tahat si toutu cestou data místo REST API nebo je to uplná blbost a websockety k tomu prostě nejsou určené?

Editoval ondrej256 (28. 7. 2018 22:25)

hacafrakus
Člen | 14
+
+2
-

Osobně bych se tomu raději vyhnul. WS mají své místo, ale zrovna na získávání výsledků hledání bych standardně poslal požadavek na API – stejně se musí poslat dotaz do databáze, serializovat. S WS by odpadla nějaká ta milisekunda na navázání spojení za cenu mnohem komplikovanějšího řešení. Jinak rozdělení na kanály je jenom nějaká nadstavba dané knihovny, lze samozřejmě napsat WS server tak, aby komunikoval formou request/response, ale to umí HTTP taky.

Raději bych zjistil, proč dotaz na hledání trvá tak dlouho a pokusil bych se aplikaci nějak optimalizovat. Nelze to zobecnit, ale nám drtivá většina endpointů odpovídá v řádu desítek milisekund.

Editoval hacafrakus (28. 7. 2018 22:41)