Socket.IO 는 가장 인기 있고 활동적인 WebSocket 에뮬레이션 라이브러리 인 것 같습니다. Juggernaut 는이를 사용하여 완전한 pub / sub 시스템을 만듭니다.
Faye 는 또한 인기 있고 활동적이며 자체 자바 스크립트 라이브러리를 가지고있어 Juggernaut와 비교할 수있는 완전한 기능을 제공합니다. Juggernaut는 서버에 노드를 사용하고 Faye는 노드 또는 랙을 사용할 수 있습니다. Juggernaut는 지속성을 위해 Redis를 사용하고 ( 수정 : pub / sub에 Redis를 사용함) Faye는 상태를 메모리에만 유지합니다.
- 위의 모든 것이 정확합니까?
- Faye는 Bayeux를 구현한다고 말합니다. Juggernaut는이 작업을하지 않는다고 생각합니다. Juggernaut가 낮은 수준이기 때문입니다 (IE, Juggernaut를 사용하여 Bayeux를 구현할 수 있음).
- Faye가 원하는 경우 Socket.IO 브라우저 자바 스크립트 라이브러리를 사용하도록 전환 할 수 있습니까? 아니면 자바 스크립트 라이브러리가 근본적으로 다른 일을합니까?
- 프로젝트간에 다른 건축 / 디자인 / 철학 차이가 있습니까?
답변
공개 : 나는 Faye의 저자입니다.
- Faye에 관해서는 당신이 말한 모든 것이 사실입니다.
- Faye는 대부분의 Bayeux를 구현합니다. 지금 당장 빠진 유일한 것은 서비스 채널입니다.이 채널의 유용성에 대해서는 아직 확신하지 못했습니다. 특히 Faye는 다음 사항에 큰 영향을 미치는 Bayeux의 CometD 참조 구현과 호환되도록 설계되었습니다.
- 개념적으로 그렇습니다. Faye 는 Socket.IO를 사용할 있습니다. 실제로 이에 대한 몇 가지 장벽이 있습니다.
- Socket.IO에 어떤 종류의 서버 측 지원이 필요한지, Faye 클라이언트 (노드와 Ruby에는 서버 측 클라이언트가 있음)가 모든 Bayeux 서버 (및 Faye 모든 Bayeux 클라이언트에 대한 서버)는 거래를 방해 할 수 있습니다.
- Bayeux에는 서버와 클라이언트가 특정 전송 유형을 지원하는 특정 요구 사항이 있으며 사용할 유형을 협상하는 방법을 알려줍니다. 또한 사용 방법 (예 : XHR 요청의 Content-Type이 해당 콘텐츠 해석 방법에 미치는 영향)도 지정합니다.
- 일부 유형의 오류 처리의 경우 전송에 직접 액세스해야합니다 (예 : Node WebSocket dies) 후 클라이언트가 다시 연결될 때 메시지 재전송 .
- 이것이 잘못된 것이 있으면 저를 수정하십시오-이것은 Socket.IO 문서의 피상적 스캔을 기반으로합니다.
- Faye는 단지 pub / sub 일 뿐이며 약간 더 복잡한 프로토콜을 기반으로하며 다음과 같은 많은 기능이 내장되어 있습니다.
- 서버 측 및 클라이언트 측 확장
- 채널 경로에 대한 와일드 카드 패턴 일치
- 자동 재 연결 (예 : WebSocket이 죽거나 서버가 오프라인 상태가 될 때)
- 클라이언트는 모든 브라우저, 전화 및 Node 및 Ruby의 서버 측에서 작동합니다.
Faye는 Juggernaut에 비해 훨씬 더 복잡해 보입니다. Juggernaut가 더 많이 위임하기 때문입니다. 예를 들어 전송 협상을 Socket.IO에 위임하고 메시지 라우팅을 Redis에 위임합니다. 둘 다 좋은 결정이지만 Bayeux를 사용하기로 결정한 것은 내가 더 많은 일을해야한다는 것을 의미합니다.
디자인 철학과 관련하여 Faye의 최우선 목표는 웹을 사용할 수있는 모든 곳에서 작동해야하며 사용하기에 절대적으로 사소해야한다는 것입니다. 시작하기가 정말 간단하지는 않지만 확장 성은 매우 강력한 방법으로 사용자 정의 할 수 있음을 의미합니다. 예를 들어 인증 확장을 추가하여 서버-클라이언트 푸시 서비스로 전환 할 수 있습니다 (즉, 임의의 클라이언트가 푸시하는 것을 중지). .
서버 측에서 더 유연하게 만들기위한 작업도 진행 중입니다. 클러스터링 지원을 추가하고 핵심 pub-sub 엔진을 플러그 가능하게 만들어 Faye를 Redis 또는 AMQP와 같은 다른 pub-sub 시스템의 상태 비 저장 웹 프런트 엔드로 사용할 수 있도록하려고합니다.
도움이 되었기를 바랍니다.
답변
- AFAIK, 예, Juggernaut는 지속성이 아닌 Pubsub에만 Redis를 사용한다는 사실을 제외하면. 또한 대부분의 언어로 된 클라이언트 라이브러리가 이미 작성되었음을 의미합니다 (Redis 어댑터 만 필요하기 때문에).
- Juggernaut는 Bayeux를 구현하지 않고 매우 간단한 사용자 정의 JSON 프로토콜을 가지고 있습니다.
- Dunno, 아마도
- Juggernaut는 매우 간단하며 그렇게 설계되었습니다. Faye를 사용하지는 않았지만 문서에서는 PubSub보다 더 많은 기능이있는 것처럼 보입니다. Socket.IO를 기반으로 구축 되었기 때문에 Juggernaut는 거의 모든 브라우저 (데스크톱 및 모바일)에서 지원됩니다.
나는 Faye의 저자가 말하는 것에 정말로 관심이있을 것입니다. 내가 말했듯이, 나는 그것을 사용하지 않았고 그것이 Juggernaut와 어떻게 비교되는지 아는 것이 좋을 것입니다. 작업에 가장 적합한 도구를 사용하는 경우 일 것입니다. pubsub가 필요한 경우 Juggernaut가 잘 수행합니다.