سؤال

لدي تطبيق Flex يستدعي وظيفة تبحث في مجموعة كبيرة من المستندات.اعتمادا على مصطلح البحث، قد يرغب المستخدم في إيقاف الطلب من flex.

لا أرغب فقط في إيقاف التطبيق المرن من توقع الطلب، ولكن أيضًا إيقاف طلب CFC.هل هذا ممكن؟ما هو أفضل نهج للقيام بذلك؟

هل كانت مفيدة؟

المحلول

لإضافة إلى الإجابة بن الموت، وأنا بما في ذلك بعض المثال رمز من طريقة يمكن تحقيق ذلك. هناك أساليب وطرق أسماء متعددة، وتنظيم واستدعاء التعليمات البرمجية أدناه، ولكن نأمل أنه من المفيد.

وعند نقطة ما خلال طلب بدء، وتخزين المعلومات حول هذه العملية في نطاق المشتركة وإرجاع 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>

نصائح أخرى

لا أعتقد أن هناك مباشر طريقة إيقاف مكالمة الصفحة خارجيًا.وفقًا للمستندات، لا يمكن إلا لسلسلة الرسائل نفسها وأصلها إحباط سلسلة رسائل معينة.

ومع ذلك، يمكنك تعيين علامة لسلسلة رسائل معينة في نطاق مشترك.

لنفترض أنك تستدعي طريقة تبدأ بعض عمليات المعالجة في الخلفية.يقوم بإنشاء معرف مؤشر ترابط فريد وإعادته إلى المتصل.يبحث مؤشر الترابط عن علامة في (على سبيل المثال) نطاق التطبيق تخبره بالتوقف.فهو يتحقق في كل خطوة فرعية من عملية الخلفية.يمكن أن يتم إحباطه في أي لحظة يتم فيها إلقاء العلم.

لرمي العلامة، أضف طريقة إحباط تأخذ اسم سلسلة الرسائل التي سيتم إحباطها، إلى جانب الأمان الكافي للتأكد من أن الطرف الثالث لا يمكنه البدء في قتل سلاسل الرسائل.

إذا كنت تستخدم ColdFusion 8، فيمكنك الاستفادة من <cfthread> بطاقة شعار.يمكنك تشغيل عملية البحث على مؤشر الترابط الخاص بها ثم استخدام الاستدعاء عن بعد لإنهاء مؤشر ترابط البحث حسب الحاجة.

ويمكنك برمجيا إنهاء طلبات إما <cfabort/> أو <cfsetting requesttimeout="0"/> - ولكن هذا على جانب الملقم CF من الأشياء، وأنا لا أعتقد أن هذا ما كنت طالبا

وإنهاء عن بعد ... حسنا، إذا كان لديك FusionReactor عليه <م> قد من الممكن الاتصال أن استخدام فليكس، وأنها يقطع الطلب بالنسبة لك. (يمكنك بالتأكيد محاولة لانهاء طلبات داخل FusionReactor، ولكن ما إذا كان أو لا فليكس أن تطلب في الواقع FR لوقفه ... عليك أن نطلب في القائمة البريدية FR إذا كان هناك طريقة للقيام بذلك.)

و
ربما حلا بديلا هو محاولة والمهندس المعماري البحث بحيث أنه يعمل على طلبات متعددة، ولكن كيف أمكن أن يكون سيعتمد على بالضبط ما كنت تبحث عنه.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top