javascript - Redux-thunk s Websocketima


Želim stvoriti websocket na zahtjev kada određene komponente žele pretplatiti se na podatke. Kako mogu dijeliti instancu websocket-a na način sličan Reduxu?

action.js

export function subscribeToWS(url) {
   return dispatch => {
      let websocket = new WebSocket(url)
      websocket.on('connect', () => {
         websocket.send("subscribe") 
      }
      websocket.on('message', (message) => {
        dispatch(storeNewData(message))
      }
   } 
}

Mogao bih napraviti nešto poput ovoga, ali to bi zahtijevalo novu instancu za svaku novu pretplatu.

Odgovor #1

Standardno mjesto za stavljanje stvari poput objekata trajne veze je unutar middleware-a. I, zapravo, doslovno postoji desetke postojećih middleware-a koji pokazuju taj pristup, pri čemu je većina njih navedena na https://github.com/markerikson/redux-ecosystem-links/blob/master/middleware.md#sockets-and-adapters. Trebali biste moći koristiti neke od njih takve kakve jesu, ili barem kao primjere.

Odgovor #2

Možete pogledati redux-websocket-bridge. On razvija Web Socket poruke u Redux akcije i prenosi Redux akcije na Web Socket.

Prednost ovog pristupa: možete koristiti Redux na svom serveru kao API krajnu točku, zamjenjujući standardni REST API s manje koda.

Također, ako vaš poslužitelj ne šalje Flux Standard Action, još uvijek možete koristiti redux-websocket-bridge za sirove poruke. Radi s string, ArrayBuffer i Blob. Naravno, uvijek možete napisati mali middleware da ih prevede u Flux Standard Action, npr. poruke s Slack RTM API-ja.