@IvanRobot

Как инициализировать единственное WebSocket соединение для нескольких запросов к серверу?

Есть класс, который организует запросы к серверу. Среди методов есть один, который отвечает за WebSocket. Данный метод принимает параметры и инициализирует соединение с сервером.

Requests.prototype.wsQuery = function(msg, callback) {
    // Инициализируется каждый раз при вызове метода. Бред!
    var w = new ws('wss://api.something.com/ws/');

    w.on('open', function() {
        w.send(JSON.stringify(msg));
    });

    w.on('message', function(res) {
        callback(res);
    });  
}

// ***

module.exports = new Requests;


Проблема в том, что при нескольких инициализациях соединение вылетает `ошибка 429`, то есть слишком много запросов к серверу...

Как организовать код, что бы инициализация WebSocket происходила всего один раз? При объявление каждого объекта Request указывать в параметрах WebSocket? Или может как-то иначе можно?

const w = new ws('wss://api.something.com/ws/');

let obj = Request(w);
let obj_2 = Request(w);
// ***
  • Вопрос задан
  • 276 просмотров
Пригласить эксперта
Ответы на вопрос 1
@RidgeA
Не совсем понятно, зачем создавать несколько объектов Request и почему бы не делать все запросы в рамках одного.

Но если действительно так надо - твой вариант не так уж и плох.

Можно скрыть инициализацию объекта в функции:
function getRequestFactory() {
  const ws = initWSConnection();
  return () => { return new Request(ws) }
}


Можно еще что-то придумать....
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
16 мая 2024, в 23:36
200000 руб./за проект
16 мая 2024, в 23:10
12000 руб./за проект