Какая разница между сокетом.Ио и WebSockets в узел.Яш? Они оба сервера нажимаем технологий? Единственное различие в том, что я чувствовал,
гнездо.Ио позволил мне отправить/генерировать сообщения, указав имя события.
В случае сокета.сообщение Ио от сервера будет доходить до всех клиентов, но для той же веб-сокетов я был вынужден держать массив и перебрать его, чтобы отправить сообщения всем клиентам.
Кроме того, Интересно, почему веб-инспектора (например, хром/поджигатель/скрипач) не можете поймать эти сообщения (от гнезда.Ио/вебсокетов) с сервера?
Пожалуйста, разъясните этот момент.
Есть несколько распространенных заблуждений относительно WebSocket и гнезда.ИО:
Первое заблуждение заключается в том, что, используя сокет.ИО-это значительно проще, чем с помощью WebSocket, который не'т, кажется, чтобы быть в случае. См. примеры ниже.
Второе заблуждение заключается в том, что с WebSocket не поддерживается в браузерах. См. ниже для получения дополнительной информации.
Третье заблуждение заключается в том, что гнездо.ИО понизило связи в качестве запасного варианта на старых браузерах. Он фактически предполагает, что браузер старый и начинается подключение к AJAX к серверу, который получает более поздние обновления на браузеры, поддержка вебсокетов, после некоторых трафик обмена. См. ниже для деталей.
Я писал НПМ модуль, чтобы продемонстрировать разницу между WebSocket и гнезда.ИО:
Это простой пример на стороне сервера и на стороне клиента код - клиент подключается к серверу, используя либо с WebSocket или гнездо.Ввода-вывода и сервер отправляет три сообщения в 1С интервалов, которые добавляются к DOM клиентом.
Сравнивать серверный пример с помощью WebSocket и розетка.ИО сделать то же самое в Express.js приложение:
Пример с WebSocket сервер, используя Express.js:
var path = require('path');
var app = require('express')();
var ws = require('express-ws')(app);
app.get('/', (req, res) => {
console.error('express connection');
res.sendFile(path.join(__dirname, 'ws.html'));
});
app.ws('/', (s, req) => {
console.error('websocket connection');
for (var t = 0; t < 3; t++)
setTimeout(() => s.send('message from server', ()=>{}), 1000*t);
});
app.listen(3001, () => console.error('listening on http://localhost:3001/'));
console.error('websocket example');
Источник: https://github.com/rsp/node-websocket-vs-socket.io/blob/master/ws.js
Гнездо.ИО пример сервера с помощью Express.js:
var path = require('path');
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
app.get('/', (req, res) => {
console.error('express connection');
res.sendFile(path.join(__dirname, 'si.html'));
});
io.on('connection', s => {
console.error('socket.io connection');
for (var t = 0; t < 3; t++)
setTimeout(() => s.emit('message', 'message from server'), 1000*t);
});
http.listen(3002, () => console.error('listening on http://localhost:3002/'));
console.error('socket.io example');
Источник: https://github.com/rsp/node-websocket-vs-socket.io/blob/master/si.js
Сравните примере клиентского использования WebSocket и гнезда.ИО сделать то же самое в браузере:
Пример с WebSocket клиента с использованием ванили на JavaScript:
var l = document.getElementById('l');
var log = function (m) {
var i = document.createElement('li');
i.innerText = new Date().toISOString()+' '+m;
l.appendChild(i);
}
log('opening websocket connection');
var s = new WebSocket('ws://'+window.location.host+'/');
s.addEventListener('error', function (m) { log("error"); });
s.addEventListener('open', function (m) { log("websocket connection open"); });
s.addEventListener('message', function (m) { log(m.data); });
Источник: https://github.com/rsp/node-websocket-vs-socket.io/blob/master/ws.html
Гнездо.ИО пример клиента с использованием ванили на JavaScript:
var l = document.getElementById('l');
var log = function (m) {
var i = document.createElement('li');
i.innerText = new Date().toISOString()+' '+m;
l.appendChild(i);
}
log('opening socket.io connection');
var s = io();
s.on('connect_error', function (m) { log("error"); });
s.on('connect', function (m) { log("socket.io connection open"); });
s.on('message', function (m) { log(m); });
Источник: https://github.com/rsp/node-websocket-vs-socket.io/blob/master/si.html
Чтобы увидеть разницу в сетевом трафике вы можете запустить мой тест](https://github.com/rsp/node-websocket-vs-socket.io#readme). Вот результаты, которые я получил:
Из этих 2 запросов:
(Запрос на обновление подключения видна на инструменты разработчика с 101 переключение протоколов.)
Из этих 6 запросы:
Вебсокетов результаты, которые я получил на localhost:
Гнездо.ИО результаты, которые я получил на localhost:
Быстрый старт:
# Install:
npm i -g websocket-vs-socket.io
# Run the server:
websocket-vs-socket.io
Открыть http://localhost:3001 в браузере откройте инструменты разработчика и Shift+сочетание клавиш Ctrl+я, откройте вкладку Сеть и перезагрузить страницу с помощью Ctrl+R, чтобы увидеть сетевой трафик для WebSocket, версия.
Открыть http://localhost:3002 в браузере откройте инструменты разработчика и Shift+сочетание клавиш Ctrl+я, откройте вкладку Сеть и перезагрузить страницу с помощью Ctrl+R, чтобы увидеть сетевой трафик для гнезда.Версия ИО.
Для удаления:
# Uninstall:
npm rm -g websocket-vs-socket.io
По состоянию на июнь 2016 с WebSocket работает на все, кроме оперы мини, в том числе IE выше 9.
Это совместимость браузера WebSocket на Можно использовать по состоянию на июнь 2016 года:
См http://caniuse.com/websockets для вверх-к-дата информация.
Его преимущества заключаются в том, что она упрощает использование веб-сокетов, как вы описали в #2, и, вероятно, более важно, она дает не за кадром для других протоколов в случае, если веб-сокеты не поддерживаются в браузере или на сервере. Я бы избежать с помощью WebSockets напрямую, если вы не очень знакомы с тем, что средах, они не't работа, и вы способны работать вокруг этих ограничений.
Это хорошо читать на обоих WebSockets и гнезда.ИО.
Я собираюсь предоставить аргумент против использования сокета.Ио.
Я думаю, используя сокет.Ио только потому, что он откаты не очень хорошая идея. Пусть ИЕ8 РИП.
В прошлом было много случаев, когда новые версии NodeJS разбил гнездо.Ио. Вы можете проверить эти списки примеры... ошибка https://github.com/socketio/socket.io/issues?q=install+
Если вы идете, чтобы разработать приложение Android или что-то, что нужно работать с имеющимся приложением, вы, вероятно, будет хорошо работать с WS сразу, гнездо.Ио может дать вам неприятности...
Плюс модуль WS для Node.JS это удивительно простой в использовании.
Используя Сокет.Ио в основном, как с помощью jQuery - вы хотите поддерживать старые браузеры, вам нужно писать меньше кода и библиотека будет предоставлять откаты. Гнездо.IO использует технологии веб-сокетов, если она доступна, а если нет, проверяет наилучшим типом коммуникации и использует ее.
Гнездо.ИО использует WebSocket и при проксировании не доступен использует резервный алгоритм, чтобы сделать в режиме реального времени соединения.
Даже если современные браузеры сейчас поддерживают WebSockets, я думаю, что нет необходимости, чтобы бросить SocketIO прочь и он все еще имеет свое место в любой в настоящее время проект. Это's легко понять, и лично я узнал, как веб-сокеты работают благодаря SocketIO.
Как сказал в этой теме, там'с большим количеством интеграция библиотек для угловых, реагировать и т. д. и типы определение машинопись и другие языки программирования.
Другой момент, который я хотел добавить к различиям между гнездо.Ио и WebSockets заключается в том, что кластеризация с гнездом.Ио не имеет большого значения. Гнездо.IO предлагает переходник, которые можно использовать, чтобы связать его с Redis для повышения масштабируемости. У вас есть ioredis и гнездо.Ио-Рэдис например.
Да, я знаю, SocketCluster существует, но, что'ы не по теме.