Где долгие процессы "живут" в приложении "реакция + сокращение"?
Для простого примера рассмотрим класс, который отправляет и принимает сообщения через веб-узел:
class WebsocketStreamer {
sendMessage(message) {
this.socket.send(…);
}
onMessageReceive(event) {
this.dispatch({
type: "STREAMER_RECV",
message: event.data,
})
}
}
Как управлять жизненным циклом этого класса?
Мой первый инстинкт - сохранить его на store
:
var stores = {
streamer: function(state={}, action) {
if (action.type == "@@INIT")
return { streamer: new WebsocketStreamer() }
if (action.type == "STREAMER_SEND")
state.streamer.sendMessage(action.message)
return state;
}
}
Но, не считая немного странного, для WebsocketStreamer
нет доступа к функции dispatch()
, и она прерывает горячую перезагрузку.
Еще одно потенциальное решение - сохранить его где-то в глобальном масштабе:
const streamer = new WebsocketStreamer();
Но это имеет очевидные последствия для тестируемости и слишком быстро перегружает.
Итак, где должен длительный процесс жить в приложении реакции + сокращение?
Примечание. Я понимаю, что этот простой пример может быть построен только с помощью магазинов + поставщиков действий. Но я хотел бы точно знать, где долгоживущие процессы должны существовать в ситуациях, когда они существуют.