Допустим, У меня есть чат. Я пересылаю сообщения через сокеты.
На клиенте это выглядит так:
const ws = new WebSocket('ws://localhost:3001');
ws.onopen = () => {
online = true;
};
ws.onclose = () => {
online = false;
};
ws.send(SOMEDATA);
ws.onmessage = res => {
//Получаю разные данные в одном месте
}
Вот тут SOMEDATA - это какая-то информация, которая уходит на сервер. Но эта информация уходит в одно и то же место. То есть в случае с AJAX, я указываю разные адреса для каждого запроса, а тут я подключаюсь
один раз и шлю именно в это соединение все данные. То же самое с получением данных. Я получаю все данные в одном месте.
Мне, например, надо помимо сообщений, получать информацию о количество подключенных пользователей и еще разную информацию.
Для этого в голову приходит следующее: для всех пересылаемых сообщений определить специальный формат:
{
type: 'Message',//totalUsers
data: SOMEDATA
}
И передавать все сообщения в виде JSON. То есть любое сообщение будет содержать поле type и сами данные в поле data. Таким образом в обработчиках и на клиенте и на сервере, я смогу в зависимости от типа сообщения, делать разные действия.
Кстати,
socket.io работает не по такому же принципу с его emit и on?