Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache flex 是否可以停止ColdFusion请求?_Apache Flex_Coldfusion - Fatal编程技术网

Apache flex 是否可以停止ColdFusion请求?

Apache flex 是否可以停止ColdFusion请求?,apache-flex,coldfusion,Apache Flex,Coldfusion,我有一个Flex应用程序,它调用一个搜索大型文档集合的函数。根据搜索词的不同,用户可能希望停止flex的请求 我不仅要阻止flex应用程序期待该请求,还要停止CFC请求。这可能吗?做这件事的最佳方法是什么?您可以通过或以编程方式结束请求-但这是在CF服务器端,我认为这不是您要问的问题 远程结束它。。。如果你有FusionReactor,你可以用Flex联系它,让它为你中断请求。 (您当然可以尝试在FusionReactor中结束请求,但Flex是否真的可以要求FR停止请求……如果有办法,您必须在

我有一个Flex应用程序,它调用一个搜索大型文档集合的函数。根据搜索词的不同,用户可能希望停止flex的请求


我不仅要阻止flex应用程序期待该请求,还要停止CFC请求。这可能吗?做这件事的最佳方法是什么?

您可以通过
以编程方式结束请求-但这是在CF服务器端,我认为这不是您要问的问题

远程结束它。。。如果你有FusionReactor,你可以用Flex联系它,让它为你中断请求。 (您当然可以尝试在FusionReactor中结束请求,但Flex是否真的可以要求FR停止请求……如果有办法,您必须在FR邮件列表中询问。)



另一种可能的解决方案是尝试并设计搜索,使其能够在多个请求上工作,但其可行性将取决于您正在搜索的内容。

如果您使用的是ColdFusion 8,则可以使用
标记。您可以在自己的线程上生成搜索进程,然后根据需要使用远程调用终止搜索线程

  • 对于cfthread

我认为没有一种直接的方法来阻止外部呼叫。根据文档,只有线程本身及其父线程可以中止给定的线程

但是,您可以为共享作用域中的给定线程设置标志

假设您调用一个方法来启动一些后台处理。它生成一个唯一的线程ID并将其返回给调用者。线程在(例如)应用程序范围中查找一个标志,告诉它停止。它在后台进程的每个子步骤进行检查。它可以在抛出该标志的任何点中止


若要抛出该标志,请添加一个abort方法,该方法采用要中止的线程的名称,并具有足够的安全性,以确保第三方不能仅仅开始终止线程。

若要添加到Ben Doom的答案中,我将包括一些实现该方法的示例代码。有多种命名、组织和调用下面代码的方法和方法,但希望它能有所帮助

在请求启动期间的某个时刻,将有关进程的信息存储在共享范围中,并向客户端返回一个ID。以下是可用于页面或远程请求的示例函数

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

然后,客户端可以通过轮询服务器来检查进度,或者提交终止进程的请求

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

然后,所讨论的实际服务器端进程可以点击一个函数,例如在循环期间,检查它是否应该中止处理并根据需要清理任何工作

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

线程在一个请求中工作,而不是跨多个请求工作?