2012-08-06 12 views
5

Estoy trabajando en un proyecto de examen en línea solo para obtener conocimiento. Puede haber un caso de falla de energía y cuando un candidato inicia sesión de nuevo, debe darse el tiempo perdido durante el corte de energía. Pero en mi código javascript, el examen finaliza después de 2 horas exactas correspondientes a la hora del servidor (aquí se usa AJAX). Después de que el tiempo termine, el alumno será redirigido a la página de inicio. He pensado en una solución, pero no encuentro un comienzo para implementarla.Si se produce un corte de energía durante un examen en línea, ¿cómo actualizamos el tiempo restante cuando el usuario vuelve a iniciar sesión en el portal?

Como se mantiene la sesión, para que pueda mantener la vez que usaba desde 2 horas y se pueden almacenar en database. cuando vuelve a iniciar sesión, se puede verificar esa fila particular que le corresponde y se puede actualizar el tiempo .

Pero no puedo implementarlo. Por favor dígame si hay otra solución o la dirección en la que estoy pensando que está bien o mal.

El reloj del examen se reanuda desde el comienzo de 2 horas. No se reanuda desde el momento en que estaba funcionando cuando la falla de energía estaba allí. Es lo mismo si ocurre un corte de energía o si un candidato vuelve a iniciar sesión en este caso al menos. Y no estoy pidiendo ningún código para este problema. Solo quiero una pista o una dirección en la que pueda pensar. Solo quiero saber cuál puede ser el concepto detrás de esto.

+1

¿Puede aclarar un poco? ¿El 'reloj de examen' solo se reanuda después de que el candidato vuelve a iniciar sesión o cuando el sistema vuelve a estar en línea? ¿La cuestión es puramente cómo implementar este esquema? ¿Puedes publicar un resumen conciso de lo que se implementó? –

+0

El reloj del examen se reanuda desde el comienzo de 2 horas. No se reanuda desde el momento en que estaba funcionando cuando la falla de energía estaba allí. Es lo mismo si ocurre un corte de energía o si un candidato vuelve a iniciar sesión en este caso al menos. Y no estoy pidiendo ningún código para este problema. Solo quiero una pista o una dirección en la que pueda pensar. Solo quiero saber cuál puede ser el concepto detrás de esto. –

+1

Según tengo entendido, usted está haciendo un sistema de examen en línea donde hay una posibilidad de falla de energía u otra razón por la cual el cronómetro debe detenerse. Creo que sería una buena idea que el lado del cliente envíe una señal de "latido" al servidor cada 5 segundos más o menos. Si el "latido del corazón" se detiene, el servidor sabe que el cliente murió (debido a una falla de energía, cierre accidental de la pestaña, etc.) y puede detener el reloj e iniciarlo cuando el examinado vuelva a iniciar sesión. Por favor actualice su pregunta si mi entendimiento es incorrecto – Jay

Respuesta

4

La formalización del problema un poco:

  • inicios de sesión de un usuario en y comienza su examen en t0. Su examen concluye en t120.
  • En algún momento (x minutos en el examen) antes del final del examen (tx) hay un corte de energía y los que están siendo evaluados deben reanudar el examen.
  • En algún momento después de tx, ty el sistema vuelve a estar en línea.
  • En algún momento posterior o igual a ty, el usuario inicia sesión nuevamente, llámalo tz. Como ha indicado, esto es igual a ty.
  • Tienen derecho a 120 - x minutos más para completar el examen. El punto en el que concluye el examen ahora es tz + (120 - x).

Posible solución:

pensado originalmente de un enfoque muy orientado a la sesión, pero este podría ser el camino a seguir:

  • implementar un sistema amplio de reloj (piensa " latido del corazón ") con un período p. Para cada intervalo p que el sistema esté activo, incremente un contador global.
  • Registre t0 como este contador global para cada examen.
  • En otra fila, actualice el tiempo transcurrido de un examen. Este es el valor actual de t0. En su código es probable que tenga la funcionalidad para guardar su trabajo en progreso, actualice el tiempo transcurrido allí. También actualice el tiempo transcurrido en cada carga de página/sección. Tenga en cuenta que si se pierde algo de trabajo entre la última actualización de tiempo transcurrido/en progreso, ellos recibirán ese tiempo 'atrás' ya que su última actualización transcurrida nunca se almacenó.
  • El intervalo p será una decisión de política. En teoría, alguien podría obtener una p adicional para completar su examen dependiendo del momento del fracaso. Si p es 1 segundo, no es gran cosa. Si son 5 minutos, es un negocio mayor. Por supuesto, habrá compensaciones de rendimiento para diferentes valores de p. Además, dado que no estamos tratando con sistemas en tiempo real aquí, puede haber algún sesgo con p.
  • Use transacciones para todo. Cuando el sistema se reanuda (y antes de que el reloj global comience a marcar nuevamente), cualquier transacción interrumpida deberá revertirse.
+1

Mi solución se centró principalmente en una falla de alimentación en el servidor. El comentario anterior de @Jayraj probablemente se puede incluir en este para explicar las desconexiones del lado del cliente (si se desea). –

+0

Ambas soluciones son aceptadas. Gracias a los dos. :) –

0

puede usar Websockets para implementar la comunicación del servidor de cliente. Websockets proporciona su propio healthchek. Tiene métodos como onOpen() y onClose() que recibe eventos al abrir o cerrar conexiones.

Cuestiones relacionadas