2011-02-04 9 views
98

Socket.IO 가장 인기 있고 활동적인 WebSocket 에뮬레이션 라이브러리 인 것 같습니다. Juggernaut은이를 사용하여 전체 게시/하위 시스템을 만듭니다.Faye 대 Socket.IO (및 Juggernaut)

Faye도 인기 활성이며, 저거넛에 완전한 기능을 비교하고, 자신의 자바 스크립트 라이브러리를 가지고있다. Juggernaut는 서버에 노드를 사용하고 Faye는 노드 또는 랙을 사용할 수 있습니다. Juggernaut는 지속성을 위해 Redis를 사용합니다 (교정 :은 pub/sub에 Redis를 사용함). Faye는 상태를 메모리에 유지합니다.

  1. 정확한 위의 모든인가? 내가 저거넛이 작업을 수행하지 않는 생각 - -
  2. 페이는 Bayeux 구현 말했다 저거 너트가 낮은 수준이기 때문에 (IE, 나는 바 이유가 저거 너트를 사용하여 구현할 수)이다
  3. 수 있었 Socket.IO 브라우저를 사용하는 페이 스위치 자바 스크립트 도서관이 원한다면? 아니면 그들의 자바 스크립트 라이브러리가 근본적으로 다른 것들을합니까?
  4. 프로젝트간에 다른 아키텍처/디자인/철학 차이점이 있습니까? 페이 확실히 할 수
+3

경우에 따라 저거넛이 사용 중지되었습니다. http://blog.alexmaccaw.com/killing-a-library 이유를 읽어보십시오. – Maziyar

+0

HTML 5 Server-Sent 이벤트는 Juggernaut 작성자 – Harindaka

답변

117

공개 : 나는 페이의 저자입니다.

  1. 페이 (Faye)에 관해서는 당신이 말한 모든 것이 사실입니다.
  2. 페이 (Faye)는 바 이유 (Bayeux)의 대부분을 구현합니다. 현재 누락 된 유일한 서비스 채널은 아직 유용성을 확신하지 못했습니다. 특히 Faye는 다음과 관련하여 큰 영향을 미치는 Bayeux의 CometD 참조 구현과 호환되도록 설계되었습니다.
  3. 개념적으로, 예 : 페이 사용 Socket.IO. 실제로,이 몇 가지 장벽이 있습니다
    • 나는 아무 생각도 없어 서버 측 지원 소켓의 종류.IO가 필요하며 Faye 클라이언트 (Node와 Ruby의 서버 측 클라이언트가 있음을 기억하십시오)가 Bayeux 서버 (그리고 모든 Bayeux 클라이언트의 Faye 서버)와 통신 할 수 있어야한다는 요구 사항이 충족 될 수 있습니다.
    • Bayeux는 서버와 클라이언트가 특정 전송 유형을 지원한다는 특정 요구 사항을 갖고 있으며 어느 전송 유형을 사용할 것인지 협상하는 방법을 말합니다. 또한 XHR 요청의 Content-Type이 콘텐츠의 해석 방법에 어떻게 영향을 미치는지와 같은 사용법을 지정합니다.
    • 일부 오류 처리 유형의 경우 전송에 직접 액세스해야합니다 (예 : resending messages when a client reconnects after a Node WebSocket dies).
    • 이 문제가 발생하면 수정하십시오. 이는 Socket.IO 문서의 간단한 스캔을 기반으로합니다.
  4. 페이 그냥 단지 약간 더 복잡한 프로토콜을 기반으로,/하위 펍과 내장 미묘한를 많이 가지고있다 :
    • 서버 - 클라이언트 측 확장
    • 와일드 카드 패턴 일치를 채널 경로에서
    • 자동 재 연결 WebSocket을 죽을 또는 서버가 오프라인 상태가 될 때
    • 클라이언트는 전화에, 모든 브라우저에서 작동하고, 서버 측

페이 아마 훨씬 더 복잡한 저거넛에 비해 보이는 노드에 루비 저거넛 때문에 더 많은 대표자들, 예. 전송 협상을 Socket.IO에 위임하고 메시지 라우팅을 Redis에 위임합니다. 이것들은 괜찮은 결정이지만, Bayeux를 사용하기로 결정한 것은 스스로 더 많은 일을해야한다는 것을 의미합니다.

디자인 철학에 대한 페이의 최우선 목표는 웹을 사용할 수있는 모든 곳에서 작동해야하며 갈 수 있어야한다는 것입니다. 정말 쉽지만 확장 성은 매우 강력한 방식으로 사용자 정의 할 수 있다는 것을 의미합니다. 예를 들어 인증 확장을 추가하여 서버 간 푸시 서비스로 전환 할 수 있습니다 (즉, 임의의 클라이언트가 푸시 중지 할 수 있음) .

또한 서버 측에서보다 유연하게 작업하기위한 작업이 진행 중입니다. 클러스터링 지원을 추가하고 코어 pub-sub 엔진을 플러그 형으로 만들어 Faye를 Redis 또는 AMQP와 같은 다른 pub-sub 시스템에 사용할 수있는 stateless 웹 프론트 엔드로 사용할 수 있도록합니다.

도움이 되셨기를 바랍니다.

+1

좋은 답변 주셔서 감사합니다. 나는 Bayeux 프로토콜의 유연성을 깨닫지 못했습니다. 그래서 임의의 클라이언트가 임의/여러 서버와 대화 할 수 있어야합니다. 이 프로젝트를 완전히 활용하는 프로젝트 또는 생산 서비스에 대해 알고 있습니까? –

+4

저는 최근 Socket.IO에서 Faye로 옮겼습니다. Faye가 내 신청서를 저장했다고 말해야합니다. 간단한 페이 (Faye) 서버와 중간 규모의 서버를 사용하면 Google 애널리틱스에 따라 6000 명의 사용자를 동시에 처리 할 수 ​​있습니다. –

13
  1. AFAIK, 그래, 떨어져 저거넛은 Pubsub하지 지속성에 대한 레디 스를 사용하는 사실에서. 또한 대부분의 언어로 된 클라이언트 라이브러리는 이미 작성되었습니다 (Redis 어댑터 만 필요하기 때문에).
  2. 저거 너트는 바 이유를 구현하는 것이 아니라
  3. 저거넛은 매우 간단하고, 그런 식으로 할 수 있도록 설계 아마 매우 간단한 사용자 정의 JSON 프로토콜
  4. 몰라을 가지고하지 않습니다. 필자가 Faye를 사용하지는 않았지만, PubSub보다 많은 기능이있는 것처럼 보입니다. Juggernaut는 Socket.IO를 기반으로 구축 되었기 때문에 데스크톱과 모바일 모두 거의 모든 브라우저에서 지원됩니다.

나는 페이의 저자가 무슨 얘기에 정말 관심이있을 수 있습니다. 내가 말했듯이, 나는 그것을 사용하지 않았으며 그것이 Juggernaut와 어떻게 비교되는지를 아는 것이 좋을 것이다. 아마도 가장 좋은 도구를 사용하는 경우 일 것입니다. 너가 필요로하는 펍이라면 저거넛이 그렇게 잘한다.

+0

에 따라 권장되는 대안 인 것 같습니다. 훌륭한 답변을 보내 주셔서 감사합니다. 나는 Redis가 그것의 pub/sub 특징을 위해서만 사용되었다는 것을 몰랐다. 내가 물어 만든이 : http://stackoverflow.com/questions/4938520 –