是否可以停止ColdFusion请求?
我有一个Flex应用程序,它调用一个搜索大型文档集合的函数。根据搜索词,用户可能想要停止flex的请求。是否可以停止ColdFusion请求?
我想不仅停止弹性应用程序期望的请求,但也停止CFC请求。这可能吗?这样做的最佳方法是什么?
要添加到本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>
你可以用<cfabort/>
或<cfsetting requesttimeout="0"/>
以编程方式结束请求 - 但这是在CF服务器端,我不认为你在问什么?
远程结束它......好吧,如果你有FusionReactor,可能有可能联系那些使用Flex,并让它中断你的请求。 (你当然可以尝试在FusionReactor中结束请求,但是Flex是否真的可以让FR停止它的请求......如果有办法做到这一点,你必须在FR邮件列表上提问)。
可能的替代解决方案是尝试构建搜索,以便它可以处理多个请求,但这种可行性取决于您正在搜索的内容。
如果您使用ColdFusion 8,则可以使用<cfthread>
标签。您可以在自己的线程上产生搜索进程,然后根据需要使用远程调用来终止搜索线程。
- Livedoc page为cfthread
- Using threads in ColdFusion
我不认为这是一个直接方式从外部停止寻呼呼叫。根据文档,只有线程本身和它的父母可以放弃给定的线程。
但是,您可以为共享作用域中的给定线程设置标志。
假设你调用一个启动一些后台处理的方法。它生成一个唯一的线程ID并将其返回给调用者。该线程在(例如)告诉它停止的应用程序范围中查找一个标志。它检查后台进程的每个子步骤。它可以在任何时候抛弃国旗。
要抛出该标志,请添加一个中止方法,该方法将取消要中止的线程的名称以及足够的安全性,以确保第三方不能仅仅开始关闭线程。
线程在请求中工作,而不是跨多个请求? – 2008-10-02 18:53:27