【问题标题】:Connecting to GDAX websocket api using socket.io with webpack使用带有 webpack 的 socket.io 连接到 GDAX websocket api
【发布时间】:2018-02-16 21:58:27
【问题描述】:

我想用一个用 react 和 webpack 构建的浏览器应用程序连接到 GDAX websocket api。我不能使用官方的 gdax-node 或 gdax-toolkit api,因为它们与 webpack 不兼容。我决定尝试自己使用 socket.io 连接到 websocket,但下面的代码从未建立连接。在下面的代码中,连接后我的“订阅”日志消息永远不会出现。如何让此代码连接或至少显示错误消息?

const io = require('socket.io-client');

var subscribe = {
  "type": "subscribe",
  "channels": [{"name": "ticker", "product_ids": ["BTC-EUR"]}]
};

function subscribeToTimer(cb) {
  console.log('Opening socket');
  var socket = io.connect('wss://ws-feed.gdax.com');

  socket.on('connection', function(socket) {
    console.log('Subscribing');

    socket.on('disconnect', function(socket) {
      console.log('Clinet disconnected.');
    });    
  });

  //socket.on('message', timestamp => cb(null, timestamp));
  socket.on('message', data => { console.log(data); });
  socket.on('error', data => { console.log(data); });
}
export { subscribeToTimer };

【问题讨论】:

  • 你怎么打电话给subscribeToTimer?使用您当前的代码示例,我们将不知道如何调用这段代码。
  • 就是这样。当我运行代码时,我可以看到正在调用该函数,因为我看到“正在打开套接字”消息,但没有看到“订阅”或“客户端断开连接”消息。 subscribeToTimer((err: Error, input: TradeMessage) => this.addRow(input));

标签: webpack websocket socket.io gdax-api


【解决方案1】:

Socket.io 不是用于此目的的适当库。我将它切换为使用 global 的 websocket,它工作正常。

function subscribeToTimer(cb) {
  console.log('Opening socket');
  const socket = new WebSocket('wss://ws-feed.gdax.com');

  socket.addEventListener('message', function(event) {
    console.log('new message', event.data);
  });

  socket.addEventListener('open', function(event) {
    console.log('Subscribing');


    var subscribe = '{"type": "subscribe", "channels": [{"name": "ticker", "product_ids": ["BTC-EUR"]}]}';
    socket.send(subscribe);

    socket.addEventListener('close', function(event) {
      console.log('Client disconnected.');
    });    
  });

  //socket.addEventListener('message', timestamp => cb(null, timestamp));
}

【讨论】:

    【解决方案2】:

    由于 gdax 仅将 wss url 暴露给 public 并且 socket.io 不支持 wssws 连接,我们必须找到解决方法。这里global.websocket 足以在浏览器中建立连接。或者您也可以查看此library。它简单地包装了ws 包,当您通过webpack 构建以供浏览器使用时,它将用browser.js 替换main。

    【讨论】:

      猜你喜欢
      • 2020-03-02
      • 1970-01-01
      • 1970-01-01
      • 2014-06-26
      • 2021-12-15
      • 2018-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多