Blog>
Snippets

Using multicastChannel for Broad Event Distribution

This code snippet illustrates setting up a multicastChannel to efficiently distribute external event triggers to multiple sagas, allowing parts of the application to react in a synchronized manner without unnecessary duplication of event listeners.
import { multicastChannel } from 'redux-saga';
import { fork, take, put } from 'redux-saga/effects';

function* watchBroadEvents() {
  const channel = yield call(multicastChannel);
  yield fork(workerOne, channel);
  yield fork(workerTwo, channel);

  while (true) {
    const action = yield take('BROAD_EVENT');
    yield put(channel, action);
  }
}
This chunk initializes a multicastChannel and sets up a saga ('watchBroadEvents') that listens for 'BROAD_EVENT' actions. When such an action is dispatched, it puts the action into the multicast channel.
function* workerOne(channel) {
  while (true) {
    const action = yield take(channel);
    // Logic to handle the action for the first worker
    console.log('Worker One processing:', action);
  }
}
Defines 'workerOne' saga that receives actions from the multicastChannel. It simulates processing of the shared events in one part of the application.
function* workerTwo(channel) {
  while (true) {
    const action = yield take(channel);
    // Logic to handle the action for the second worker
    console.log('Worker Two processing:', action);
  }
}
Defines 'workerTwo' saga similarly to 'workerOne', showcasing how multiple workers listen to the same channel for broadcasted events, allowing for synchronized event handling.