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.