Я не уверен, является ли это правильным способом реализации соединения с веб-сокетом в NodeJS, но проблема, с которой я сталкиваюсь, связана не с WebSockets, а с переменными класса.
Это мой класс WebSocket:
class WebSocketCalss {
constructor ( httpserver )
{
console.log("Initializing WebSocketCalss");
this.httpServer = httpserver;
this.connection = null;
this.client = null;
this.initializeWebSocket();
}
initializeWebSocket()
{
var WebSocketServer = require('websocket').server;
var wsServer = new WebSocketServer({
httpServer: this.httpServer
});
wsServer.on('request', function(request) {
console.log((new Date()) + ' Connection from origin ' + request.origin + '.');
this.connection = request.accept(null, request.origin);
console.log((new Date()) + ' Connection accepted.');
this.connection.sendUTF(JSON.stringify({ type: "history", data: "data"} ));
var t = 0;
/* ---- Client ---- */
var W3CWebSocket = require('websocket').w3cwebsocket;
this.client = new W3CWebSocket('wss://ws.bitstamp.net');
this.client.onerror = function() {
console.log('Connection Error');
};
this.client.onopen = function() {
console.log('WebSocket Client Connected');
var subscribeMsg = {
"event": "bts:subscribe",
"data": {
"channel": "live_trades_btcusd"
}
};
this.client.send(JSON.stringify(subscribeMsg));
};
this.client.onclose = function() {
console.log('echo-protocol Client Closed');
};
this.client.onmessage = function(e) {
if (typeof e.data === 'string') {
var bitstampPrice = JSON.parse(e.data).data.price;
console.log(bitstampPrice);
this.connection.sendUTF(bitstampPrice);
}
};
});
//this.connection.sendUTF(JSON.stringify({ type: "history", data: "data"} ));
}
}
module.exports = (httpserver) => { return new WebSocketCalss(httpserver) }
Это может быть волосатым, вот что я пытаюсь сделать:
- Мой сервер NodeJS откроет соединение WebSocket с моим клиентом (браузером)
- В этом WebSocket я хочу отправить значение, полученное от другого WebSocket (то есть мой NodeJS подключится как клиент)
- Кажется, что все работает хорошо по отдельности, однако, когда я пытаюсь отправить значение (которое я получил в качестве клиента), на мой собственный клиент (так как я являюсь сервером), я получаю
Невозможно прочитать свойство 'send' из неопределенного
По сути, внутри функции обратного вызова переменная this не определена. Как будто это новый объект.
Я не знаком с ES6, поэтому считаю, что я делаю что-то в корне неправильно.
Если бы кто-то мог пролить свет на это, это было бы очень ценно.