Я новичок в веб-сокетах.
Я пытаюсь реализовать веб-сокет в приложении MeanJS, чтобы подписаться на некоторые данные в реальном времени, которые предоставляет другой веб-сайт, когда данные возвращаются, я хотел бы обновить таблицу в своем представлении с результатами.
Я столкнулся с логической проблемой. Моя реализация не удалась, потому что она пытается отправить несколько ответов через одно TCP-соединение (я полагаю), она умирает с ошибкой:
throw new Error('Cant set headers after they are sent.');
Я понимаю, почему возникает эта ошибка, но, поскольку я новичок в WebSockets и довольно плохо знаком с NodeJS, я не уверен, как реорганизовать этот код таким образом, чтобы это имело смысл.
В моем клиентском контроллере:
// Get Orderbook
$scope.getOrderbook = function() {
$http.get('exchanges/' + $stateParams.exchangeId + '/get_orderbook')
.success(function(data) {
console.log("ORDERBOOK DATA: " + data); // DEBUGGING
$scope.orderBook = data;
});
};
В моем контроллере на стороне сервера:
exports.getOrderbook = function(req, res, next) {
var exchange = req.exchange;
if(exchange.slug === 'somesite') {
var ws = new WebSocket('wss://www.somesite.com/realtimews');
ws.on('open', function open() {
ws.send('{"op": "subscribe", "args": "orderBook"}');
});
ws.on('message', function(message) {
var response = JSON.parse(message);
if(response.table) {
res.jsonp(response.data);
}
});
}
};
Как лучше всего реорганизовать этот код, чтобы я мог подписаться на веб-сокет, получать от него сообщения и при получении любого сообщения обновлять представление с данными?