2009-05-24 13 views
6

Tengo un proyecto escolar en el que tengo que implementar una aplicación de chat, cuyo servidor será un servicio web de Java.Implementación de un servidor de chat como WebService

El problema es que siempre he pensado en un servicio web como una forma de llamar a funciones remotas, y no tengo idea de cómo mantener activa una "sesión" en el servicio web, ni cómo hacer un seguimiento de todo las personas actualmente en chat, salas, etc.

+0

próxima vez que vea a su profesor de Inglés le muestran/ella una copia de su pregunta original. Bienvenido a StackOverflow. – UnkwnTech

+2

pero, obviamente, la gramática en los internets no es importante, siempre y cuando se transmita el significado – Chii

+1

La gramática es extremadamente importante, donde quiera que vaya. –

Respuesta

6

Según tengo entendido, se supone que un servidor de chat debe conocer a sus clientes después de una conexión inicial y enviar todos los mensajes del cliente a todos los clientes. Esto definitivamente requiere algún tipo de mantenimiento de sesión. Creo que la forma correcta de hacerlo es la siguiente:

  1. El cliente llama al servicio web 'handshake' y proporciona algunos detalles de identificación mínimos.
  2. El servidor devuelve un acuse de recibo que incluye un identificador de cliente único.
  3. El cliente llama al 'servicio' del servicio web y envía un mensaje nuevo, junto con su identificador.
  4. El servidor identifica al cliente por el identificador y distribuye el mensaje a todos los clientes.

No estoy muy seguro de cómo debería funcionar la distribución de mensajes, ya que los servicios web son esencialmente un servicio de extracción y no de inserción. Quizás el cliente debería exponer su propio servicio web para que el servidor llame.

Espero que esto ayude,

Yuval = 8-)

+0

es probable que los "clientes" necesiten extraer nuevos mensajes, lo cual se puede hacer de la misma manera que el "latido" que sugerí. – UnkwnTech

+0

Eso podría funcionar también ... aunque mantener el estado de cada mensaje es costoso. El servidor podría enviar todo el registro de mensajes cada vez, pero eso sería costoso para el cliente (sin mencionar el bloqueo de la red). – Yuval

+0

Eso es casi lo que finalmente hicimos. 3 llamadas principales al servicio web por parte del cliente: regístrese (envíe mi información), envíe un mensaje y extraiga todos los mensajes que me esperan. Guardamos los mensajes como hash-table de listas vinculadas, donde la clave de hash-table es el usuario para el que están esperando los mensajes, y el valor es una lista de mensajes. La principal lección de este proyecto fue que la tecnología de WebService es la más inapropiada para este tipo de cosas. Gracias por todas las respuestas. – MeLight

0

No sé Java, por lo que esta respuesta será independiente del idioma.

En mi opinión, la forma más sencilla de hacerlo sin ejecutar un proceso en el servidor sería almacenar todos sus datos en una base de datos.

Aquí está una lista corta de las cosas básicas que hay que hacer:

  1. Necesita una tabla con una lista de usuarios y contraseñas para la autenticación
  2. Necesidad de una mesa para el que ha iniciado sesión en usos
    A. necesita un campo de fecha y hora del último contacto
  3. Cuando un usuario pone al día algo que el campo de contacto última a la hora actual
  4. Si pasado el tiempo de contacto del usuario es> hora actual + 2 luego minutos, se cerrará la sesión
  5. aplicación del lado del
  6. cliente tendrá que enviar mensajes periódicos para el servidor que decir "Todavía estoy aquí"
  7. Usted tendrá que encontrar una manera de determinar si un mensaje ha sido enviado y cuándo actualizar el cliente de mostrar que se ha recibido un mensaje, esto lo dejo a usted.

Si aún necesitas ayuda aquí hay una aplicación de chat AJAX/ASP.Net que debería (no miré su fuente) funcionar de la misma manera.

+0

Olvidó el enlace a la aplicación ... – RedFilter

0

me escribió un motor de chat que tenía un servicio en segundo plano y todo lo almacenado en una base de datos, una forma de cuadros de entrada y de salida de un marco que recibió la secuencia html.

Si desea omitir la parte de servicio y solo implementarla a través de un servicio web, debe implementar al menos dos operaciones: Publicar entradas y GetLatestChanges para recibir la salida del chat, que se traduce en HTML utilizando JavaScript.

Por supuesto, necesita realizar un seguimiento de las habitaciones, los usuarios, los mensajes, qué usuario recibe qué textos, etc., tal como lo esbozó Unknwntech.

1

Podría considerar implementar una solución COMET. Esto efectivamente le dará comunicación push, eliminando así la latencia, una característica MUY agradable para una aplicación de chat.

Si quieres ir a por el oro, considerar la implementación de las funciones más avanzadas:

  • de corrección ortográfica
  • URLs/direcciones de correo electrónico convertidos en enlaces automáticamente
  • salas de chat separadas
  • funciones de moderador (finalizar chat, usuario kick)
  • información del evento como "El usuario está escribiendo ..."
  • estados (disponible, bu sy, distancia ...)
  • avatares
  • ...
Cuestiones relacionadas