Hay básicamente dos tipos de servidor a servidor (S2S) conexiones. El primero se llama una puerta de enlace o un transporte, pero son lo mismo. Este es probablemente el tipo que estás buscando. No pude encontrar documentación específica para el lado no XMPP, pero cómo XMPP piensa en hacer traducciones a servidores heredados está en http://xmpp.org/extensions/xep-0100.html. El segundo tipo realmente no se explica en ningún XEP adicional: son conexiones regulares XMPP s2s. Busque "Comunicación de servidor a servidor" en RFC 3920 o RFC 3920bis para la última actualización del borrador.
Dado que tiene sus propios usuarios y presencia en su servidor, y no es XMPP, los conceptos no se asignarán completamente al modelo XMPP. Aquí es donde entra el trabajo del transporte. Tienes que hacer la traducción desde tu modelo al modelo XMPP. Si bien esto es un trabajo, puedes tomar todas las decisiones.
Lo que nos lleva directamente a una de las opciones de diseño clave: debe decidir realmente qué cosas va a asignar a XMPP de su servicio y cuáles no. Estas características y descripciones de casos de uso impulsarán la estructura general. Por ejemplo, ¿es esto como un transporte para hablar con los servicios de chat de AOL o MSN? Luego, necesitará una forma de asignar su equivalente de listas, presencia y mantener la información de la sesión junto con los inicios de sesión y las contraseñas de los usuarios locales en el servidor remoto. Esto se debe a que su transporte deberá pretender ser esos usuarios y deberá iniciar sesión para acceder a ellos.
O tal vez es solo un puente s2s para el ajedrez basado en XMPP de otra persona, por lo que no necesita iniciar sesión en el servidor remoto y puede actuar de manera similar a un servidor de correo electrónico y pasar la información adelante. (Con las conexiones s2s normales, la única sesión que se almacenaría sería la autenticación SASL utilizada con el servidor remoto, pero a nivel de usuario, s2s solo mantiene la conexión, y no la sesión de inicio de sesión.)
Otros factores son la escalabilidad y la modularidad de su parte. Has encontrado algunas de las inquietudes de escalabilidad. Eche un vistazo a poner en transportes múltiples para equilibrar la carga. Para la modularidad, vea dónde desea tomar decisiones sobre qué hacer con cada paquete o acción. Por ejemplo, ¿cómo manejas y haces un seguimiento de los datos de suscripción? Puedes ponerlo en tu transporte, pero eso hace que usar transportes múltiples sea más difícil. O si toma esa decisión más cerca de su servidor central, puede tener transportes más simples y usar algún código común si necesita hablar con servicios que no sean XMPP. El trade off es un servidor central más complejo con más potencial de vulnerabilidad.