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" //Сообщение получено.
Он так-же поддерживает ивенты передаваемые между клиентами:
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 секунды
Любой wsc.send({}) возвращает Promise. Через какое-то время (по умолчанию 10 секунд) будет вызван reject timeout.
Для избежание ошибок:
await wsc.send({testReply: true}).catch(console.error); //Рекомендуется
await wsc.send({testReply: true, timeout: null}); //Не рекомендуется т.к. заставит ожидать вечный timeout
Сообщения запросов по типу wsc.send({}) генерируют промис. Ответ на этот запрос НЕ отобразиться в wsc.on('message', console.log); в любом случае.
Передав опции создания клиента
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”]