微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

一个连接 - 多个通道

如何解决一个连接 - 多个通道

我有 2 个观察者,每个观察者创建一个套接字连接。如何建立一个连接?

有没有办法把socket的连接移动到一个变量中,然后传给Watchers? 连接socket的代码中有注释。

观察者中的频道

export function* watchOnSocketBinanceRT() {
  while (true) {
    const { socketToken } = yield take(types.BINANCE_SOCKET_OPEN);
    const socket = yield call(socketConnectionBinance,socketToken); // Creates a new connection
    const channel = yield call(socketChannelBinanceRT,socket);

    if (socket.onopen) {
      yield put({ type: types.BINANCE_SOCKET_CONNECTED });
    }

    yield fork(socketSendBinance,socket);
    yield fork(socketCloseBinance,socket);

    const { cancel } = yield race({
      task: call(socketonmessageBinance,channel),cancel: take(types.BINANCE_SOCKET_CLOSED),});

    if (cancel) {
      buffersRT.flush();
      channel.close();
    }
  }
}

export function* watchOnSocketBinance() {
  while (true) {
    const { socketToken } = yield take(types.BINANCE_SOCKET_OPEN);
    const socket = yield call(socketConnectionBinance,socketToken); // Creates a new connection
    const channel = yield call(socketChannelBinance,});

    if (cancel) {
      channel.close();
    }
  }
}

套接字连接

const socketConnectionBinance = socketToken => {
  return new Promise((resolve,reject) => {
    let socket;
    if (socketToken) {
      socket = new WebSocket(`${wsUrlBinance()}/${socketToken}`);
    } else {
      socket = new WebSocket(`${wsUrlBinance()}`);
    }

    socket.onopen = function () {
      resolve(socket);
      console.log('Binance connection opened');
    };
    socket.onerror = function (event) {
      reject(event);
      console.log('Binance socket error: ',event);
    };
    socket.onclose = function (event) {
      if (event.wasClean) {
        console.log('Binance connection closed');
      }
    };
  });
};

感谢您的帮助!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。