使用带有webpack的socket.io连接到GDAX websocket api
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用带有webpack的socket.io连接到GDAX websocket 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 };
答案
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));
}
另一答案
由于gdax只将wss
url暴露给public而socket.io不支持wss
或ws
连接,我们必须找到解决方法。这里global.websocket
足以在浏览器中建立连接。或者你也可以查看这个library。它简单地包装了ws
包,当你使用webpack构建浏览器时,它将用browser.js
替换main。
以上是关于使用带有webpack的socket.io连接到GDAX websocket api的主要内容,如果未能解决你的问题,请参考以下文章
使用 angular 5 的 socket.io 连接到套接字