Какую библиотеку websocket использовать с Node.js?
В настоящее время существует множество библиотек websocket для node.js, наиболее популярным представляется:
Однако я не могу найти каких-либо твердых конкретных сравнений между любыми из них...
Очевидно, Socket.io был потрясающим, но стал довольно устаревшим и имеет неудачные сборки. И ws, и websocket- node утверждают, что они самые быстрые. И engine.io кажется новым, но намного тяжелее, чем легкие aletarntives.
Было бы замечательно, если бы мы или кто-то мог собрать ответ, который будет служить руководством для использования библиотеки сокетов и когда, а также сравнение между ними.
Ответы
Ответ 1
Получение шара с этим сообществом wiki. Не стесняйтесь отредактировать меня с вашими улучшениями.
-
ws
Сервер и клиент WebSocket для node.js. Одна из самых быстрых библиотек, если не самая быстрая.
-
websocket-node
Сервер и клиент WebSocket для node.js
-
websocket-driver-node Парсер сервера и клиентского протокола WebSocket node.js - используется в faye-websocket- node
-
faye-websocket-node Сервер и клиент WebSocket для node.js - используется в файлах faye и sockjs
-
socket.io
Сервер и клиент WebSocket для клиента node.js + для браузеров + (v0 имеет самые старые и самые старые резервные копии, v1 из Socket.io использует engine.io) + каналы - используемые в stack.io. Клиентская библиотека пытается повторно подключиться к отключению.
-
sockjs
Сервер и клиент WebSocket для node.js и других + клиент для браузеров + новейшие старые версии
-
faye Сервер и клиент WebSocket для node.js и других + клиент для браузеров + резервные копии + поддержка других серверные языки
-
deepstream.io кластерный сервер реального времени, который обрабатывает WebSockets и TCP-соединения и обеспечивает синхронизацию данных, pub/sub и запрос/ответ
-
socketcluster Кластер серверов WebSocket, который использует все ядра ЦП на вашем компьютере. Например, если бы вы использовали экземпляр xlarge Amazon EC2 с 32 ядрами, вы могли бы обрабатывать почти 32 раза трафик в одном экземпляре.
-
primus Предоставляет общий API для большинства вышеперечисленных библиотек для удобства переключения + стабильности для всех из них.
Когда использовать:
-
используйте базовые серверы WebSocket, если вы хотите использовать собственные реализации WebSocket на клиентах, остерегайтесь несовместимости браузера
-
используйте резервные библиотеки, когда вы заботитесь о резервных копиях браузера
-
используйте полнофункциональные библиотеки, когда вам нравятся каналы
-
использовать primus, когда вы не знаете, что использовать, не в настроении переписывать ваше приложение, когда вам нужно переключать фреймворки из-за изменения требований к проекту или необходимости дополнительной стабильности соединения.
Ответ 2
Обновление: этот ответ устарел, поскольку выпущены более поздние версии упомянутых библиотек.
Socket.IO v0.9 устарел и немного глючит, а Engine.IO - это временного преемника. Socket.IO v1.0 (который будет выпущен в ближайшее время) используйте Engine.IO и намного лучше, чем v0.9. Я бы рекомендовал вам использовать Engine.IO до тех пор, пока не будет выпущен Socket.IO v1.0.
"ws" не поддерживает резервное копирование, поэтому, если браузер клиента не поддержка websockets, это не сработает, в отличие от Socket.IO и Engine.IO который использует длительный опрос и т.д., если веб-узлы недоступны. Однако, "ws" кажется самой быстрой библиотекой на данный момент.
См. мою статью, сравнивая Socket.IO, Engine.IO и Primus: https://medium.com/p/b63bfca0539
Ответ 3
npm ws был ответом для меня. Я нашел его менее навязчивым и более прямым. С ним было также тривиально смешивать веб-порты с услугами отдыха. Общий простой код на этом посту.
var WebSocketServer = require("ws").Server;
var http = require("http");
var express = require("express");
var port = process.env.PORT || 5000;
var app = express();
app.use(express.static(__dirname+ "/../"));
app.get('/someGetRequest', function(req, res, next) {
console.log('receiving get request');
});
app.post('/somePostRequest', function(req, res, next) {
console.log('receiving post request');
});
app.listen(80); //port 80 need to run as root
console.log("app listening on %d ", 80);
var server = http.createServer(app);
server.listen(port);
console.log("http server listening on %d", port);
var userId;
var wss = new WebSocketServer({server: server});
wss.on("connection", function (ws) {
console.info("websocket connection open");
var timestamp = new Date().getTime();
userId = timestamp;
ws.send(JSON.stringify({msgType:"onOpenConnection", msg:{connectionId:timestamp}}));
ws.on("message", function (data, flags) {
console.log("websocket received a message");
var clientMsg = data;
ws.send(JSON.stringify({msg:{connectionId:userId}}));
});
ws.on("close", function () {
console.log("websocket connection close");
});
});
console.log("websocket server created");