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


429

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

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

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


246
이것이 종료되면 이와 같은 질문은 어디로 가야합니까? 대답이 엄청나게 유용 할 것입니다 ... 불행히도 그러한 중요한 질문이 여기에 있지 않아야합니다.
balupton

14
커뮤니티 위키에 대한 Woot woot, 즉 새로운 답변에서 질문이 닫혀 있음에도 불구하고 우리는 여전히 커뮤니티 위키 답변을 향상시킬 수 있음을 의미합니다 :)
balupton

14
동의합니다. 이런 종류의 질문은 단지 허용되는 것이 아니라 격려하는 것입니다. 그들은 몇 년 안에 관련이 없을 수도 있지만 그때까지는 세상을 구할 것입니다.
John Little

1
@balupton 커뮤니티를 원하는대로 업데이트 할 수 있습니까? socket.io입니까?
C graphics

3
@Cgraphics 요즘 ws와 함께 Primus를 사용하고 있습니다 .ws가 필요한 모든 것이므로 더 극단적 인 것이 필요하면 Undering 라이브러리를 바꾸고 Primus 덕분에 동일한 API를 유지하십시오. 경이로움
balupton

답변:


390

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

  • 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 테스트 환경입니다. 실시간 이벤트를 개발하는 동안 디버깅하십시오.


10
자세한 답변 주셔서 감사합니다. 사용 시점 3을 설명 할 수 있습니까? 포인트가 언급하는 채널은 무엇입니까? 나는 웹 소켓을 처음 사용하고 내 경우에 어느 것을 사용 해야하는지 이해하려고합니다.
Akshat Jiwan Sharma

2
아우토반 / WAMP는 어떻습니까?
Emile Cormier

1
now.js의 사망 후 사용 가능한 모든 옵션의 멋진 목록
Rahul Prasad

@AkshatJiwanSharma는 : 채널은 소위 '방'메시지를 교환 할 수있는 방에서 각 플레이어 ...이다
Marwen 트라벨시

4
ws에 대한 작은 세부 사항은 파이썬이 필요하다는 것입니다. 따라서 도커 컨테이너 또는 기타에 배포하는 경우 사용할 수있는 파이썬이 있어야합니다 ws.
AntouanK

40

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

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


이것은 일반적인 Node.js 0.12가 즉각적 임을 상기시켜줍니다 ... 그들은 또한 몇 달 동안 그것을 주장합니다. 아마, 우리는 기다려야 할 것입니다…
Golo Roden

1
Autobahn / WAMP ( wamp.ws )에 대한 통찰력 / 경험이 있습니까?
Emile Cormier

6
Socket.IO가 v1을 출시했습니다. Engine.io는이를 대체하지는 않지만 전송 프로토콜로 Socket.IO에 의해 내부적으로 사용됩니다. 엔드 포인트 (xhr, ws) 간의 실제 통신을 추상화하고 패킷 형식은 단순합니다. Socket.io는 와이어를 통해 이벤트 이미 터와 같은 느낌을주는 더 풍부한 API를 제공합니다.
hammett

29

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

연결 방식으로 요청 URL을 얻는 방법은 무엇입니까? wss.on ( "connection", function (ws) {// 일부 코드 console.log (ws. ???) URL 가져 오기 ...}
Opalosolo

아약스 요청에서와 같이 요청 URL이 없습니다. 자바 스크립트 라이브러리는 127.0.0.1:8080 또는 anything.com:7777 등의 주소를 사용하여 웹 소켓 서버에 연결합니다. 혼란 스럽지만 웹 소켓에 대한 간단한 자습서를 살펴보십시오.
MFAL

5
실제로 WebSocket 끝점에는 URL도 ws있으며 다음과 같이로 시작 ws://myserver.com합니다. 예, 80 및 443 포트를 사용하여 제공되도록 구성 할 수도 있습니다. nginx와 같은 리버스 프록시를 사용하면 WebSocket프로토콜 URL을 일반 HTTP 프로토콜에서 다른 포트로 라우팅 할 수 있습니다 .
Prahlad Yeri

원하는 경우 경로를 시뮬레이션 할 수 있습니다.
Lucas Tettamanti

1
를 사용 express-ws하면 ws특급 앱 에 경로 를 추가 할 수 있습니다 .
Dmitry Masley
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.