2010-05-30 34 views
6

Estoy eligiendo entre AMQP (RabbitMQ) vs XMPP (eJabberd) para mi juego de turnos en tiempo real basado en JavaScript y basado en turnos. No sé mucho sobre el protocolo AMQP y XMPP. Me gustaría utilizar PHP para la autorización del usuario y algunos datos de almacenamiento de la tienda con MySQL. Por lo que descubrí, RabbitMQ tiene clientes PHP pero eJabberd no.¿Cuál debería elegir AMQP o XMPP para el juego basado en navegador en tiempo real?

Lo que entendí es que el cliente de JavaScript llama al script PHP y manipula el procesamiento necesario y luego pasa al servidor AMQP o XMPP para pasar los datos al jugador oponente. Hay un buen libro 'Pro XMPP Programming with JS and jQuery' de Wrox, pero no hay ejemplos con PHP. Así que las siguientes son mis preguntas.

1) ¿Qué protocolo es adecuado para mi juego?

2) ¿Debo elegir RabbitMQ solo por su soporte al cliente PHP?

+0

XAMPP/LAMP/etc no tienen nada que ver con el JavaScript del lado del cliente. Apache y otros servidores son lo que estás buscando. –

+2

@Coronatus! Gracias por tu comentario, pero estoy seguro de que has pasado por alto lo que quise decir. El Protocolo Extensible de Mensajes y Presencia (XMPP) es de lo que estoy hablando. – Devyn

+0

Lo siento, confundí "XMPP" con "XAMPP". Ignora mi comentario :) –

Respuesta

9

que he tenido bastante buena éxito la implementación de un cliente XMPP en Javascript utilizando HTTP Enlazar enfoque para XMPP BOSH. No sé sobre AMQP, pero para el acceso del lado del cliente, me encanta XMPP. Algunas palabras por qué.

ejabberd ya incluye compatibilidad con BOSH, y para usar con Javascript (y presumiblemente Flash) solo necesita dirigir su servidor para redirigir las solicitudes al puerto en el que configura ejabberd para escuchar solicitudes HTTP. (E incluso esto solo porque el modelo de seguridad Javascript en los navegadores actuales prohíbe las solicitudes de Javascript a diferentes dominios e incluso puertos diferentes.)

Dado que XMPP es un conjunto de pequeños documentos XML bastante triviales, debería ser bastante fácil codificarlos en cualquier idioma que elige.

Dado que es ampliamente compatible, es posible que evite que sus usuarios se registren en su servicio, lo cual seguramente apreciarán.

La implementación de XMPP significa que puede agregar trivialmente soporte de mensajería instantánea a su juego, con federación al resto de la red Jabber (incluyendo Google Talk).

Como no sé nada sobre AMQP, no puedo compararlos, pero puedo decir por qué siempre consideraré XMPP para mis futuros proyectos para varios jugadores.


Mi razón personal para la elección de ejabberd es simple - es muy fácil de instalar y configurar en Debian. Estoy casi completamente familiarizado con Erlang y Java; Lo que entiendo, sin embargo, acerca de Erlang es que hace que la escalabilidad sea fácil de lograr, y ejabberd personas dicen que lo han logrado.

Si desea hacer una verificación lógica del lado del servidor, me temo que no conozco ningún buen método. Me gustaría ir con un script proxy de PHP haciendo una comprobación de cordura en el mensaje entrante XMPP BOSH, y luego reenviándolo al servidor, en lugar de solo reenviarlo a través del mod_rewrite de Apache.

Como se mencionó anteriormente, definitivamente tendrá que hacer proxy de algún tipo (con mod_rewrite o con PHP o de alguna otra manera) ya que el servidor XMPP escuchará en un puerto diferente que el servidor web "principal", y Javascript el modelo de seguridad entre dominios no permite hacer XMLHTTPRequest en un puerto diferente.

Por lo tanto, la verificación de la cordura podría ser más fácil al transmitir solicitudes BOSH al servidor XMPP de su elección. Indagar en el software del servidor podría no ser la mejor manera de hacer este tipo de comprobaciones. Tomaría mucho tiempo, y probablemente haría más difícil la integración con el resto de tu juego.

O bien, me encontré con una respuesta que menciona XMPP components and ejabberd modules. Esta será una lectura interesante para mí, también.

Buena suerte, y asegúrese de dejar un comentario con el nombre del juego cuando se hace - Me encantaría verlo :-)


simplemente me di cuenta de otra persona publicado una very similar question a tí. Sus respuestas contienen información más interesante para usted.


Sobre el uso de XMPP con Flash:

Se podría utilizar, sin embargo, HTTP (BOSH) que se une con Flash. De hecho, aunque el enlace HTTP permite que Javascript acceda a XMPP, fue concebido para una variedad de aplicaciones, como conexiones móviles que a menudo pueden romperse.

Principalmente descubrí cómo establecer la conexión al observar las comunicaciones entre el cliente basado en web JWChat y ejabberd (para información sobre BOSH) y luego las comunicaciones entre el cliente multiplataforma Psi y ejabberd (para información sobre el protocolo en sí). Con Web Inspector de JWChat y WebKit o con Firebug para Firefox, uno puede rastrear fácilmente XMLHttpRequests hacia el servidor. Con Psi, uno puede activar la consola XML y leer el registro de comunicaciones. Combinado con la creación de prototipos de un cliente en el idioma de su elección, estudiar BOSH y XMPP resultó ser muy fácil.

Además, los siguientes XEP son útiles: XEP-0124, XEP-0206.

O'Reilly libro que estoy leyendo en este momento, "XMPP: The Definitive Guide" (P. Saint-Andre, Kevin Smith, Remko Tronçon; mucho más barato on Apple's App Store) también le da la sensación de "¿por qué se hacen las cosas como son", y documenta muchas cosas pequeñas y diversas aplicaciones de XMPP.

Después de eso, la implementación de un cliente basado en BOSH podría resultar bastante fácil.No tengo experiencia con la codificación con Flash aparte de hacer que un botón se reproduzca y pause, así que tome esto con un grano de sal :-)

+0

Hola, gracias por tu respuesta. Como no conozco a Erlang, me temo que tendré problemas al escribir reglas de servidor para el juego con módulos. ¿Hay alguna razón por la que tiene que elegir Ejabberd sobre OpenFire basado en Java? Tengo muy pocos conocimientos en Java, así que ambos idiomas no me son familiares. – Devyn

+0

¡Gracias de nuevo por sus amables respuestas! Debido a los requisitos de mi juego, javascript no es suficiente, así que ahora estoy intentando con Flash. Sin embargo, tengo el dilema de elegir entre servidores de socket comerciales (SmartFox, ElectroServer) o ir con XMPP pero muy pocos ejemplos y tutoriales para XMPP con Flash. De todos modos, le avisaré primero cuando pueda publicar algo :) – Devyn

+0

Voy a editar la respuesta nuevamente para proporcionar más información. No parece encajar en esta pequeña caja de comentarios :) –

1

AMQP aún no ha llegado a la versión 1.0 y tiene algunos posibles problemas de diseño a su alrededor. Hay clientes XMPP para PHP, así que si yo fuera tú probaría primero.

+0

¿Puedes indicarnos algún cliente PHP disponible para XMPP? – Devyn

+0

http://xmpp.org/software/libraries.shtml#php –

1

Como alguien mencionó, debe considerar la parte de cliente a servidor; eso parece más importante.

Parece que ya tiene el mejor libro sobre el tema (el libro XMPP + JS de Jack Moffit) y definitivamente diría que esa es la tecnología.

También obtendrá autenticación de usuario, cifrado y todas las extensiones de protocolo XMPP además de eso, como se describirá en el libro.

Aunque no puedo recomendar ningún cliente PHP-XMPP, no creo que necesariamente tenga el mismo nivel de funciones listo para usar con AMQP.

Además, si es versado en otros idiomas, y dependiendo de la cantidad de lógica de juego requerida, puede escribir un componente de servidor XMPP. Ver esta cuestión previa sobre XMPP + juego para obtener información:
XMPP C# Interaction

Cuestiones relacionadas