[node.js] Node.js와 함께 사용할 웹 소켓 라이브러리는 무엇입니까? [닫은]

현재 node.js에 대한 수많은 웹 소켓 라이브러리 가 있으며 가장 인기있는 것으로 보입니다.

그러나 나는 그들 사이의 확실한 비교를 찾을 수 없습니다 … 분명히 Socket.io는 훌륭했지만 꽤 오래되었지만 빌드가 실패했습니다. ws와 websocket-node는 모두 가장 빠르다고 주장합니다. 그리고 engine.io는 새로운 것처럼 보이지만 가벼운 aletarntive보다 훨씬 무겁습니다.

우리 또는 누군가가 어떤 소켓 라이브러리를 언제 그리고 언제 사용할 지에 대한 가이드 역할을하고 그들 사이의 비교를 제공하는 답변을 모을 수 있다면 놀랍습니다.



답변

커뮤니티 위키 답변으로 볼을 구르십시오 . 당신의 개선 사항으로 를 자유롭게 편집 하십시오.


  • node.js를위한 ws WebSocket 서버 및 클라이언트. 가장 빠른 라이브러리가 아닌 경우 가장 빠른 라이브러리 중 하나입니다.


  • node.js 용 websocket-node WebSocket 서버 및 클라이언트

  • websocket-driver-node WebSocket 서버 및 클라이언트 프로토콜 파서 node.js-faye-websocket-node에서 사용

  • faye-websocket-node node.js 용 WebSocket 서버 및 클라이언트-faye 및 sockjs에 사용

  • socket.io
    WebSocket 서버 및 node.js 용 클라이언트 + 브라우저 용 클라이언트 + (v0은 최신 폴백을 사용하고 v1은 socket.io v1은 engine.io를 사용합니다) + 채널-stack.io에 사용됩니다. 연결 해제시 클라이언트 라이브러리가 다시 연결을 시도합니다.

  • sockjs
    WebSocket 서버 및 node.js 용 클라이언트 및 기타 + 브라우저 용 클라이언트 + 최신에서 가장 오래된 폴백

  • faye WebSocket 서버 및 node.js 용 클라이언트 및 기타 + 브라우저 용 클라이언트 + 대체 + 다른 서버 측 언어 지원

  • WebSocket 및 TCP 연결을 처리하고 데이터 동기화, 펍 / 서브 및 요청 / 응답을 제공하는 deepstream.io 클러스터 가능 실시간 서버

  • 시스템 의 모든 CPU 코어를 사용하는 socketcluster WebSocket 서버 클러스터. 예를 들어 32 개의 코어가있는 xlarge Amazon EC2 인스턴스를 사용하는 경우 단일 인스턴스에서 거의 32 배의 트래픽을 처리 할 수 ​​있습니다.

  • primus 쉽게 전환하고 모든 라이브러리의 안정성을 향상시키기 위해 위의 대부분의 라이브러리에 공통 API를 제공합니다.

사용시기 :

  • 클라이언트 측에서 기본 WebSocket 구현을 사용하려는 경우 기본 WebSocket 서버를 사용하고 브라우저 비 호환성에 주의하십시오

  • 브라우저 폴백에 관심이있을 때 폴백 라이브러리 사용

  • 채널에 관심이있을 때 모든 기능을 갖춘 라이브러리를 사용하십시오.

  • 무엇을 사용해야할지 모르거나 프로젝트 요구 사항 변경으로 인해 프레임 워크를 전환해야하거나 추가 연결 안정성이 필요할 때 응용 프로그램을 다시 작성하려는 마음이 들지 않는 경우 프리머스를 사용하십시오.

테스트 할 곳 :

Firecamp 는 SocketIO, WS 및 모든 주요 실시간 기술을위한 GUI 테스트 환경입니다. 실시간 이벤트를 개발하는 동안 디버깅하십시오.


답변

업데이트 : 언급 된 최신 버전의 라이브러리가 그 이후로 릴리스 되었으므로이 답변은 구식입니다.

Socket.IO v0.9는 구식이며 약간 버그가 있으며 Engine.IO는 중간 후속 버전입니다. Socket.IO v1.0 (곧 출시 될 예정)은 Engine.IO를 사용하며 v0.9보다 훨씬 우수합니다. Socket.IO v1.0이 출시 될 때까지 Engine.IO를 사용하는 것이 좋습니다.

“ws”는 폴백을 지원하지 않으므로 클라이언트 브라우저가 웹 소켓을 지원하지 않으면 웹 소켓을 사용할 수없는 경우 긴 폴링 등을 사용하는 Socket.IO 및 Engine.IO와 달리 작동하지 않습니다. 그러나 “ws”는 현재 가장 빠른 라이브러리처럼 보입니다.

Socket.IO, Engine.IO 및 Primus를 비교하는 내 기사를 참조하십시오 :
https://medium.com/p/b63bfca0539


답변

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");


답변