Pregunta

Tengo una aplicación Flex que llama a una función que busca en una gran colección de documentos. Dependiendo del término de búsqueda, el usuario puede querer detener la solicitud de flex.

I & # 8217; me gustaría no solo evitar que la aplicación flexible espere la solicitud, sino también detener la solicitud de CFC. es posible? ¿Cuál & # 8217; es el mejor enfoque para hacer esto?

¿Fue útil?

Solución

Para agregar a la respuesta de Ben Doom, incluyo un código de ejemplo de una forma en que esto se puede lograr. Existen múltiples enfoques y formas de nombres, organizando y llamando al código a continuación, pero espero que sea útil.

En algún momento durante el inicio de la solicitud, almacene información sobre el proceso en un ámbito compartido y devuelva una ID al cliente. Aquí hay ejemplos de funciones que podrían usarse en la página o en solicitudes remotas.

<cffunction name="createProcess" output="false">
  <cfset var id = createUUID()>
  <cfset application.processInfo[id] = {
    progress = 0,
    kill = false
  }>
  <cfreturn id />
</cffunction>

El cliente puede verificar el progreso mediante un servidor de sondeo o enviar una solicitud para eliminar el proceso

<cffunction name="getProcessProgress" output="false">
  <cfargument name="processID" required="true">
  <cfreturn application.processInfo[arguments.processID].progress />
</cffunction>

<cffunction name="killProcess" output="false">
  <cfargument name="processID" required="true">
  <cfset application.processInfo[arguments.processID].kill = true />
</cffunction>

El proceso real del lado del servidor en cuestión puede golpear una función, por ejemplo, durante un ciclo, para verificar si debe interrumpir el procesamiento y limpiar cualquier trabajo según corresponda.

<cffunction name="shouldKillProcess" output="false">
  <cfargument name="processID" required="true">
  <cfreturn application.processInfo[arguments.processID].kill />
</cffunction>

Otros consejos

No creo que haya una forma directa de detener una llamada de página externamente. Según los documentos, solo el hilo en sí y su padre pueden abortar un hilo dado.

Sin embargo, puede establecer un indicador para un hilo determinado en un ámbito compartido.

Supongamos que llama a un método que inicia un procesamiento en segundo plano. Genera un ID de hilo único y lo devuelve a la persona que llama. El hilo busca una bandera en (por ejemplo) el alcance de la aplicación que le indica que se detenga. Comprueba en cada subpaso del proceso en segundo plano. Podría abortar en cualquier momento en que se arroje la bandera.

Para lanzar la bandera, agregue un método de aborto que tome el nombre del hilo que se va a abortar, junto con suficiente seguridad para asegurarse de que un tercero no pueda simplemente comenzar a matar hilos.

Si está utilizando ColdFusion 8, puede utilizar la etiqueta <cfthread>. Puede generar el proceso de búsqueda en su propio hilo y luego usar la llamada remota para terminar el hilo de búsqueda según sea necesario.

Puede finalizar las solicitudes mediante programación con <cfabort/> o <cfsetting requesttimeout="0"/>, pero eso está en el lado del servidor CF, lo que no creo que sea lo que está preguntando.

Finalizarlo de forma remota ... bueno, si tiene FusionReactor, podría ponerse en contacto con eso usando Flex y hacer que interrumpa la solicitud por usted. (Ciertamente, puede intentar finalizar las solicitudes dentro de FusionReactor, pero si Flex puede o no pedirle a FR que lo detenga ... tendría que preguntar eso en la lista de correo de FR si hay una manera de hacerlo).


Posiblemente, una solución alternativa es intentar diseñar la búsqueda para que funcione en múltiples solicitudes, pero la factibilidad dependerá exactamente de lo que esté buscando.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top