【发布时间】:2021-09-16 04:57:18
【问题描述】:
我有问题。我在 React Redux eventChannel 中的 websocket 的帮助下连接到服务器。我从服务器接收事件没有问题,但我无法将事件发送到服务器。我知道,我需要获取我在 eventChannel 中创建的 websocket 连接对象,以从反应组件发送事件。
export function* wsWatcher() {
yield takeEvery("LOGIN_SUCCESS", wsConnectionWorker);
}
function* wsConnectionWorker() {
const channel: EventChannel<boolean> = yield call(initWebsocket);
while (true) {
const action: Action<any> = yield take(channel);
yield put(action);
}
}
function initWebsocket(): EventChannel<any> {
return eventChannel((emitter) => {
let id: string | undefined;
let intervalId: number;
const initConnection = () => {
const connectionUrl: string = "ws://localhost:4000"
let ws = new WebSocket(connectionUrl);
ws.onopen = () => {
id && ws.send(JSON.stringify({ type: "GET_USER_ID", id }));
intervalId = window.setInterval(() => {
ws.send(JSON.stringify({ type: "PING" }))
}, 30000)
};
ws.onclose = (e) => {
console.log("Reconnect in 4s");
intervalId && clearInterval(intervalId);
id && setTimeout(initConnection, 4000);
};
};
initConnection();
return () => {
console.log("Socket off");
};
});
}
提前致谢
【问题讨论】:
标签: javascript reactjs redux websocket redux-saga