[websocket] Faye 대 Socket.IO (및 Juggernaut)

Socket.IO 는 가장 인기 있고 활동적인 WebSocket 에뮬레이션 라이브러리 인 것 같습니다. Juggernaut 는이를 사용하여 완전한 pub / sub 시스템을 만듭니다.

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

  1. 위의 모든 것이 정확합니까?
  2. Faye는 Bayeux를 구현한다고 말합니다. Juggernaut는이 작업을하지 않는다고 생각합니다. Juggernaut가 낮은 수준이기 때문입니다 (IE, Juggernaut를 사용하여 Bayeux를 구현할 수 있음).
  3. Faye가 원하는 경우 Socket.IO 브라우저 자바 스크립트 라이브러리를 사용하도록 전환 할 수 있습니까? 아니면 자바 스크립트 라이브러리가 근본적으로 다른 일을합니까?
  4. 프로젝트간에 다른 건축 / 디자인 / 철학 차이가 있습니까?


답변

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

  1. Faye에 관해서는 당신이 말한 모든 것이 사실입니다.
  2. Faye는 대부분의 Bayeux를 구현합니다. 지금 당장 빠진 유일한 것은 서비스 채널입니다.이 채널의 유용성에 대해서는 아직 확신하지 못했습니다. 특히 Faye는 다음 사항에 큰 영향을 미치는 Bayeux의 CometD 참조 구현과 호환되도록 설계되었습니다.
  3. 개념적으로 그렇습니다. Faye Socket.IO를 사용할 있습니다. 실제로 이에 대한 몇 가지 장벽이 있습니다.
    • Socket.IO에 어떤 종류의 서버 측 지원이 필요한지, Faye 클라이언트 (노드와 Ruby에는 서버 측 클라이언트가 있음)가 모든 Bayeux 서버 (및 Faye 모든 Bayeux 클라이언트에 대한 서버)는 거래를 방해 할 수 있습니다.
    • Bayeux에는 서버와 클라이언트가 특정 전송 유형을 지원하는 특정 요구 사항이 있으며 사용할 유형을 협상하는 방법을 알려줍니다. 또한 사용 방법 (예 : XHR 요청의 Content-Type이 해당 콘텐츠 해석 방법에 미치는 영향)도 지정합니다.
    • 일부 유형의 오류 처리의 경우 전송에 직접 액세스해야합니다 (예 : Node WebSocket dies) 후 클라이언트가 다시 연결될 때 메시지 재전송 .
    • 이것이 잘못된 것이 있으면 저를 수정하십시오-이것은 Socket.IO 문서의 피상적 스캔을 기반으로합니다.
  4. Faye는 단지 pub / sub 일 뿐이며 약간 더 복잡한 프로토콜을 기반으로하며 다음과 같은 많은 기능이 내장되어 있습니다.
    • 서버 측 및 클라이언트 측 확장
    • 채널 경로에 대한 와일드 카드 패턴 일치
    • 자동 재 연결 (예 : WebSocket이 죽거나 서버가 오프라인 상태가 될 때)
    • 클라이언트는 모든 브라우저, 전화 및 Node 및 Ruby의 서버 측에서 작동합니다.

Faye는 Juggernaut에 비해 훨씬 더 복잡해 보입니다. Juggernaut가 더 많이 위임하기 때문입니다. 예를 들어 전송 협상을 Socket.IO에 위임하고 메시지 라우팅을 Redis에 위임합니다. 둘 다 좋은 결정이지만 Bayeux를 사용하기로 결정한 것은 내가 더 많은 일을해야한다는 것을 의미합니다.

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

서버 측에서 더 유연하게 만들기위한 작업도 진행 중입니다. 클러스터링 지원을 추가하고 핵심 pub-sub 엔진을 플러그 가능하게 만들어 Faye를 Redis 또는 AMQP와 같은 다른 pub-sub 시스템의 상태 비 저장 웹 프런트 엔드로 사용할 수 있도록하려고합니다.

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


답변

  1. AFAIK, 예, Juggernaut는 지속성이 아닌 Pubsub에만 Redis를 사용한다는 사실을 제외하면. 또한 대부분의 언어로 된 클라이언트 라이브러리가 이미 작성되었음을 의미합니다 (Redis 어댑터 만 필요하기 때문에).
  2. Juggernaut는 Bayeux를 구현하지 않고 매우 간단한 사용자 정의 JSON 프로토콜을 가지고 있습니다.
  3. Dunno, 아마도
  4. Juggernaut는 매우 간단하며 그렇게 설계되었습니다. Faye를 사용하지는 않았지만 문서에서는 PubSub보다 더 많은 기능이있는 것처럼 보입니다. Socket.IO를 기반으로 구축 되었기 때문에 Juggernaut는 거의 모든 브라우저 (데스크톱 및 모바일)에서 지원됩니다.

나는 Faye의 저자가 말하는 것에 정말로 관심이있을 것입니다. 내가 말했듯이, 나는 그것을 사용하지 않았고 그것이 Juggernaut와 어떻게 비교되는지 아는 것이 좋을 것입니다. 작업에 가장 적합한 도구를 사용하는 경우 일 것입니다. pubsub가 필요한 경우 Juggernaut가 잘 수행합니다.


답변

Faye는 확실히 할 수 있습니다. Socket.IO 위에있는 유사한 프로젝트의 또 다른 예 :

https://github.com/aaronblohowiak/Push-It


답변