Frage

Ich habe eine Flex-Anwendung, die eine Funktion aufruft, die eine große Dokumentensammlung durchsucht. Je nach Suchbegriff möchte der Benutzer kann die Anforderung von Flex zu stoppen.

Ich mag nicht nur die Flex-Anwendung beenden den Antrag erwartet, sondern auch die CFC-Anfrage zu stoppen. Ist das möglich? Was ist der beste Ansatz, dies zu tun?

War es hilfreich?

Lösung

So fügen Sie auf Ben Doom Antwort, ich darunter auch einige Beispiel-Code einer Art und Weise dies erreicht werden kann. Es gibt mehrere Ansätze und Möglichkeiten, von Namen, die Organisation und den Code aufrufen, aber hoffentlich ist es hilfreich.

An einem gewissen Punkt während der Anforderungsstart, speichern Informationen über den Prozess in freigegebenen Bereich und geben eine ID an den Client. Hier sind beispielsweise Funktionen, die auf Seite oder Remote-Anfragen verwendet werden können.

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

Client kann dann überprüfen, Fortschritte durch die Abfrage-Server oder Antrag stellen Prozess zu beenden

<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>

Der tatsächliche serverseitigen Prozess in Frage ist dann eine Funktion treffen kann, beispielsweise während einer Schleife, um zu überprüfen, ob er die Verarbeitung und Bereinigung der Arbeiten gegebenenfalls abbrechen sollte.

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

Andere Tipps

Ich glaube nicht, gibt es eine direkt Art und Weise extern eine Durchsage zu stoppen. Nach der Dokumentation nur der Faden selbst und es ist Elternteil kann einen bestimmten Thread zunichte machen.

Sie können jedoch einen Flag für einen bestimmten Thread in einem gemeinsamen Rahmen festgelegt.

Angenommen, Sie haben eine Methode aufrufen, die einige Hintergrundverarbeitung beginnt. Es erzeugt eine einzigartige Thread-ID und gibt sie an den Anrufer. Der Thread sucht nach einer Flagge in (beispielsweise) den Anwendungsbereich, die es zu stoppen teilen. Es prüft bei jedem Teilschritt des Hintergrundprozesses. Es könnte an einer beliebigen Stelle abbrechen, die Flagge geworfen wird.

, die Fahne zu werfen, fügen Sie ein Abbruchverfahren, das den Namen des Themas nimmt die abgebrochen werden soll, zusammen mit ausreichender Sicherheit, um sicherzustellen, eine dritte Partei kann nicht einfach starten Threads töten.

Wenn Sie Coldfusion 8 verwenden, können Sie die Verwendung des <cfthread> Tag machen. Sie können den Suchvorgang auf einem eigenen Thread laichen ab und dann den Remote-Aufruf verwenden, um die Suche Thread zu beenden, je nach Bedarf.

Sie können programmatisch Anfragen enden entweder mit <cfabort/> oder <cfsetting requesttimeout="0"/> - aber das ist auf der CF-Server-Seite der Dinge, die ich nicht glaube, ist, was Sie fragen

beenden sie aus der Ferne ... na ja, wenn Sie FusionReactor es könnte möglich sein, kontaktieren Sie, dass Flex verwenden und die Anforderung für Sie unterbrechen. (Sie können natürlich versuchen, Anfragen innerhalb FusionReactor zu beenden, aber auch nicht Flex kann tatsächlich fragen, FR, ihn zu stoppen ... man müsste die Liste auf der FR Mailing fragen, ob es einen Weg gibt, das zu tun.)


Möglicherweise eine alternative Lösung ist die Suche, um zu versuchen und Architekten, so dass es über mehrere Anforderungen funktioniert, aber wie möglich, die auf genau hängt ist das, was Sie suchen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top