문제

사용자 및 존재에 대한 고유한 개념을 가진 별도의 시스템이 있는 경우 XMPP 서버 네트워크에 대한 브리지를 생성하는 데 가장 적합한 아키텍처는 무엇입니까?내가 아는 한, 세 가지 주요 방법이 있습니다.

  1. 서버 역할을 합니다.이로 인해 하나의 접점이 생성되지만 호환성에 영향을 미칠 수 있으며 서버 에뮬레이션을 위해 시스템이 복잡해질 가능성이 있습니다.

  2. 고객으로 행동하십시오.이는 내 시스템에서 사용자당 하나의 연결이 필요하다는 것을 의미하는 것 같습니다. 이는 확장이 잘 되지 않습니다.

  3. XMPP 게이트웨이 프로토콜에 대해 들어본 적이 있지만 이것이 클라이언트 솔루션보다 나은지는 확실하지 않습니다.이것이 표준인지 아닌지도 알 수 없습니다.

어떤 제안이나 절충안이라도 감사하겠습니다.예를 들어, 이러한 솔루션 중 하나라도 대상 XMPP 서버 내에서 코드를 실행해야 합니까(제가 할 수 있는 작업은 아닐 것입니다).

도움이 되었습니까?

해결책

여러분이 들어본 XMPP 게이트웨이 프로토콜은 전송과 관련이 있을 가능성이 가장 높습니다.전송은 XMPP 서버와 비XMPP 서버 모두에 연결하는 서버입니다.전송을 실행하면 Jabber 클라이언트를 사용하여 MSN Messenger를 사용하는 사람과 대화할 수 있습니다.

전송은 일반적으로 온라인으로 간주되는 각 JID에 대해 원격 네트워크에 한 번 연결됩니다.즉, 반대의 옵션 2입니다.이는 전송과 비XMPP 네트워크 사이에 특별한 관계가 없기 때문입니다.전송은 단순히 일반 고객의 역할을 수행합니다.이것이 작동하려면 XMPP 클라이언트는 먼저 전송에 등록하고 원격 네트워크에 대한 로그인 자격 증명을 제공하고 전송에서 자신의 존재를 볼 수 있도록 허용해야 합니다.

이것이 더 나은 확장 가능성을 갖는 유일한 이유는 동일한 원격 네트워크에 대해 많은 전송이 있을 수 있다는 것입니다.예를 들어 내 Jabber 서버는 MSN으로의 전송을 실행할 수 있고, 다른 Jabber 서버는 또 다른 서버를 실행할 수 있으며, 각각은 XMPP 사용자의 서로 다른 하위 집합에 대한 연결을 제공합니다.이렇게 하면 Jabber 측의 로드가 분산되고 시스템의 로드 밸런싱도 로드가 분산될 수 있지만 여전히 두 시스템 간에 많은 연결이 필요합니다.

귀하의 경우에는 XMPP가 아닌 쪽이 협력하고 있다고 가정하기 때문에 XMPP가 아닌 서버에 XMPP 서버 인터페이스를 배치하는 것이 가장 좋습니다.해당 서버 인터페이스는 XMPP 사용자에게 등록 등을 강요하는 대신 XMPP JID 간의 매핑과 해당 JID가 자체 네트워크에 표시되는 방식을 관리하는 데 가장 적합합니다.

아직 본 적이 없다면 다음 내용이 유용할 수 있습니다.

도움이 되길 바랍니다.

다른 팁

나 역시 비슷한 시스템을 연구하고 있다.

게이트웨이/구성 요소 경로를 사용하겠습니다.여러 옵션을 살펴보고 이 옵션으로 결정했습니다.

게이트웨이는 기본적으로 Jabber/XMPP를 다른 네트워크와 연결하는 특정 목적을 가진 구성 요소입니다.XMPP를 클라이언트로 사용할 때 당연하게 여기는 대부분의 기능을 구축해야 합니다.명단 제어와 같은 것.

구성 요소의 실제 설계 및 구축에 대한 온라인 도움말은 거의 없습니다.위의 답변과 마찬가지로 xmpp 프로토콜/확장 기능이 도움이 된다는 것을 알았습니다.주요 내용은 다음과 같습니다.

이를 읽어보면 어떤 XEP를 처리할 수 있을 것으로 예상되는지 알 수 있습니다.구성 요소가 연결될 서버에서 처리할 내용은 무시하세요.

Djabberd의 "모든 것이 모듈입니다"라는 시스템이 서버의 백엔드가 다른 네트워크에 직접 인터페이스할 수 있는 가능성을 제공했기 때문에 문서가 좋지 않다는 것은 부끄러운 일입니다.나는 이것에 진전을 이루지 못했습니다.

기본적으로 서버 간(s2s) 연결에는 두 가지 유형이 있습니다.첫 번째는 게이트웨이 또는 전송이라고 부르지만 둘은 동일합니다.아마도 이것이 당신이 찾고 있는 종류일 것입니다.XMPP가 아닌 측면에 대한 특정 문서를 찾을 수 없었지만 XMPP가 레거시 서버로의 변환에 대해 어떻게 생각하는지에 대해서는 다음과 같습니다. http://xmpp.org/extensions/xep-0100.html.두 번째 종류는 추가 XEP에서 실제로 설명되지 않습니다. 일반적인 XMPP s2 연결입니다.최신 초안 업데이트는 RFC 3920 또는 RFC 3920bis에서 "서버 간 통신"을 찾아보세요.

서버에 자체 사용자와 존재가 있고 XMPP가 아니기 때문에 개념이 XMPP 모델에 완전히 매핑되지는 않습니다.여기서 운송 작업이 시작됩니다.모델에서 XMPP 모델로 변환을 수행해야 합니다.이것은 약간의 작업이지만 모든 결정을 내리게 됩니다.

그러면 핵심 디자인 선택 중 하나가 나옵니다. 서비스에서 XMPP에 매핑할 항목과 매핑하지 않을 항목을 실제로 결정해야 합니다.이러한 기능과 사용 사례 설명은 전체 구조를 주도합니다.예를 들어 AOL이나 MSN 채팅 서비스와 대화하기 위한 전송과 같은가요?그런 다음 해당 사용자의 명단, 현재 상태를 매핑하고 세션 정보를 로컬 사용자의 로그인 및 비밀번호와 함께 원격 서버에 매핑하는 방법이 필요합니다.이는 귀하의 전송이 해당 사용자인 것처럼 가장하고 해당 사용자를 위해 로그인해야 하기 때문입니다.

또는 다른 사람의 XMPP 기반 체스 게임에 대한 s2s 브리지일 수도 있으므로 원격 서버에 로그인할 필요가 없으며 이메일 서버와 유사하게 작동하고 정보를 앞뒤로 전달할 수 있습니다.(일반적인 s2s 연결의 경우 저장되는 유일한 세션은 원격 서버에서 사용되는 SASL 인증이지만 사용자 수준에서는 s2s는 로그인 세션이 아닌 연결만 유지합니다.)

다른 요소로는 확장성과 모듈성이 있습니다.확장성 문제 중 일부를 해결했습니다.로드 균형을 맞추기 위해 여러 전송 장치를 배치하는 방법을 살펴보십시오.모듈성을 위해 각 패킷이나 작업에 대해 무엇을 할지 결정하려는 위치를 확인하세요.예를 들어, 구독 데이터를 어떻게 처리하고 추적합니까?운송 수단에 넣을 수는 있지만 여러 운송 수단을 사용하는 것이 더 어려워집니다.또는 핵심 서버에 더 가깝게 결정을 내리면 전송이 더 간단해지고 XMPP 이외의 서비스와 통신해야 하는 경우 일부 공통 코드를 사용할 수 있습니다.단점은 더 많은 취약성을 지닌 더 복잡한 코어 서버입니다.

사용해야 하는 아키텍처는 비XMPP 시스템에 따라 다릅니다.

  1. 비XMPP 시스템을 운영하고 있습니까?그렇다면 해당 시스템에 XMPP-S2S 인터페이스를 추가하는 방법, 즉 XMPP 서버 역할을 하는 방법을 찾아야 합니다.AOL은 AIM에 이 접근 방식을 사용하고 있습니다.불행하게도 그들은 GoogleTalk에 대한 게이트웨이를 제한했습니다.

  2. 비XMPP 시스템을 운영하지는 않지만 사용할 수 있는 연합 인터페이스가 있습니다. i.이자형.게이트웨이는 다른 시스템과 통신할 수 있습니다 서버로서 그리고 자체적인 네임스페이스를 가지고 있습니다.이 경우 양쪽에서 페더레이션 서버 역할을 하는 게이트웨이를 구축할 수 있습니다.이 접근 방식을 사용하는 게이트웨이의 예는 모르지만 공용 XMPP-SIP 브리지를 구축하려는 경우 이를 사용할 수 있습니다.

  3. 비XMPP 시스템이 연합 인터페이스를 제공하지 않으면 클라이언트 무리로 작동하는 것 외에는 다른 옵션이 없습니다.XMPP 세계에서는 이를 "전송"이라고 합니다.전송과 일반 서버의 차이점은 기본적으로 다음과 같습니다.

    • 전송의 JID가 다른 시스템에서 매핑됩니다(예:john.doe\40example.net@msngateway.example.org - 정말 못생겼어요!)
    • 전송을 사용하려는 XMPP 사용자는 비XMPP 시스템에서 계정을 생성하고 해당 계정의 로그인 자격 증명을 전송 서비스에 제공해야 합니다.XMPP 프로토콜에는 XMPP 사용자가 대역 내에서 전송 등록을 수행할 수 있도록 하는 프로토콜 확장도 있습니다.

또 다른 접근 방식은 XMPP 서버 공급업체와 협력하는 것입니다.대부분에는 타사 애플리케이션에서 현재 상태를 주입할 수 있게 해주는 내부 API가 있습니다.예를 들어, 재버 XCP 이를 위해 정말 사용하기 쉬운 API를 제공합니다.

(폭로:저는 Jabber XCP를 개발한 Jabber, Inc에서 근무합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top