使用带有webpack的socket.io连接到GDAX websocket api

时间:2018-02-16 21:58:27

标签: webpack websocket socket.io gdax-api

我希望使用使用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 };

2 个答案:

答案 0 :(得分:0)

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));
}

答案 1 :(得分:0)

由于gdax仅将wss网址暴露给公众,而socket.io不支持wssws连接,因此我们必须找到解决方法。这里global.websocket足以在浏览器中建立连接。或者您也可以查看此library。它只是包装ws包,当您通过webpack构建浏览器使用时,它将替换主browser.js