BOKOSCU

AsyncSocket

AsyncSocket - это простая реализация обмена данными в WS с использованием асинхронных методов. Она состоит из модуля Node.js, Web и WebMin.
Сервер AsyncSocketServer реализован для Node.js, основным отличием от обычного WebSocket.Server заключается в том, что событие “connection” возвращает AsyncSocket.
AsyncSocket - это тот же клиент WebSocket, но реализующий свое собственное событие “message” и методы: send, sendNoReply, sendEmit.

Пример

Сервер

const wss = new AsyncSocketServer({port: 8080});

wss.on('connection', wsc=> {
    console.log("New connect");

    wsc.on('message', mess=>{
        if(mess.testReply) return mess.reply({message: "Great"}); //Если сообщение передаст testReply - ответить ему
        else console.log(mess); //Иначе просто log
    });
});

Клиент

const wsc = await AsyncSocketClient(new WebSocket('ws://localhost:8080'));
//or
const ws = new WebSocket('ws://localhost:8080');
const wsc = await new Promise((resolve, reject) => {
    ws.on('open', async () => {
        const wsc = new AsyncSocket(ws);
        resolve(wsc);
    });
});

//Основной код ---

wsc.on('message', console.log); //Логировать все сообщения.
const data = await wsc.send({testReply: true}); //Отправить запрос с ожиданием
console.log(data.message); //=>"Great" //Сообщение получено.

Events

Он так-же поддерживает ивенты передаваемые между клиентами:

Сервер

wss.on('connection', wsc=> {
    console.log("New connect");

    setInterval(()=>{
        wsc.sendEmit('interval', {message: "Great"})
    },5000);
});

Клиент

wsc.on('interval', data=>console.log(data.message)); //=>"Great" Каждые 5 секунды 

Для web клиента оно немного отличается:

wsc.addEventListener('interval', data=>console.log(data.message)); //=>"Great" Каждые 5 секунды

Другое

Time Reject

Любой wsc.send({}) возвращает Promise. Через какое-то время (по умолчанию 10 секунд) будет вызван reject timeout.
Для избежание ошибок:

await wsc.send({testReply: true}).catch(console.error); //Рекомендуется

await wsc.send({testReply: true, timeout: null}); //Не рекомендуется т.к. заставит ожидать вечный timeout

No log

Сообщения запросов по типу wsc.send({}) генерируют промис. Ответ на этот запрос НЕ отобразиться в wsc.on('message', console.log); в любом случае.

Reconnect

Передав опции создания клиента

const wsc = await AsyncSocketClient(new WebSocket('ws://localhost:8080'), {
        reconnect: true, //Да, переподключаться при потере соединения
        time: 2, //Через 2 секунды, потом через 4, потом через 6...
        count: 6 //Максимум 6 раз
});

Включается попытки переподключения. Пригодиться, при слабом соединении сервера. Все запросы будут задерживаться при попытках переподключения и могут быть reject по времени

&_Tags: [“Node”,“JS”,“Node.js”,“JavaScript”, “AsyncSocket”, “Async”, “Web”]