2012-12-18 36 views
5

नीचे कोड है कि मैं सफल धूमकेतु कार्यान्वयन का उपयोग कर समाप्त कर रहा हूं।केकफ़्प धूमकेतु सब कुछ ब्लॉक करता है

$lastmodif = isset($this->params['form']['timestamp']) ? $this->params['form']['timestamp'] : 0; 
$currentmodif = $already_updated[0]['Update']['lastmodified']; 

while ($currentmodif <= $lastmodif) 
{ 
    usleep(5000000); 
    clearstatcache(); 
    $already_updated_new = $this->Update->find('all',array 
    (
     'conditions' => array 
     ( 
      'Update.receiver_id' => $this->Auth->user('id'), 
      'Update.table_name' => "request_responses" 
     ) 
    )); 
    $currentmodif = $already_updated_new[0]['Update']['lastmodified']; 
}

$already_updated[0]['Update']['lastmodified'] तालिका के अंतिम अद्यतन टाइमस्टैम्प प्राप्त करने के लिए क्वेरी परिणाम है।

उपर्युक्त कोड में $ lastmodif और $ currentmodif प्रत्येक सफल धूमकेतु प्रतिक्रिया के बाद पारित होने वाला टाइमस्टैम्प है।

लेकिन अब समस्या यह है कि जब मैं एक ही पृष्ठ पर अन्य लिंक पर क्लिक कर रहा हूं तो कुछ भी नहीं होता है, लेकिन इसके पुनर्निर्देशन के लिए इंतजार करने के बाद।

मुझे लगता है कि नींद अन्य HTTP अनुरोध को अवरुद्ध कर रही है।

मैं mysql उपयोग कर रहा हूँ और CakePHP लोग मुझे मार्गदर्शन मैं क्या इस मुद्दे को हल करने के लिए क्या करना चाहिए कृपया।

जब पेज को कॉल किया जाता है तो मैंने फ्लश करने की कोशिश की है लेकिन यह दिखाता है कि आउटपुट पहले से ही भेजा गया है क्योंकि हेडर त्रुटि संशोधित नहीं कर सकता है।

धन्यवाद।

+0

आप इस के लिए एक समाधान मिला

केक एक सत्र घटक है? यदि आपने किया है, तो कृपया एक उत्तर लिखें, यदि आपने नहीं किया है, तो यह उपयोगी होगा यदि आप व्यू कोड प्रदान करते हैं। मैं मदद करने में सक्षम हो सकता हूं। – luchomolina

+0

मुझे यह नहीं मिला ... –

उत्तर

5

मैं कई बार इसी तरह की स्थिति से मुलाकात की है। ऐसा लगता है कि सत्र आपकी नींद की लिपि से अवरुद्ध है।

कैसे CakePHP में इसे हल करने के लिए: अपनी स्क्रिप्ट के शुरू में
कॉल session_write_close();
केक के सत्र घटक या सहायक के माध्यम से ऐसा करने का कोई तरीका नहीं है
नोट: यदि स्क्रिप्ट के अंदर कुछ सत्र का उपयोग करता है - केक सत्र फिर से खोल देगा और फिर से उसी सत्र का उपयोग करने वाले सभी अनुरोधों को लटका देगा।इस मामले में आपको नींद से पहले या किसी भी ऑपरेशन से पहले सत्र बंद करना होगा, जो

+0

आपके लिए +1 क्योंकि आप पूरी तरह से समस्या को समझते हैं ... –

0

हां, नींद आगे के अनुरोधों को अवरुद्ध कर रही है। आपके होस्टिंग पर्यावरण के आधार पर, आपके पास शायद सीमित मात्रा में प्रक्रियाएं उपलब्ध हैं। मुझे लगता है कि आपके चैट में कई उपयोगकर्ता हैं -> वे सभी ब्लॉकिंग प्रक्रिया जारी करते हैं जब तक कि कोई भी उपलब्ध न हो, यही कारण है कि आपके अन्य "लिंक" टाइमआउट।

मैं ग्राहक ब्राउज़र पक्ष पर इंतजार लागू करने के लिए सुझाव है, जैसे

setTimeout(function() { 
    fetchAndPrintTheNewChats(); 
}, 50000000); 

अपने PHP कोड के भीतर यह करने के लिए एक ही समस्या का परिणाम देगा किसी भी दृष्टिकोण।

+0

उत्तर के लिए धन्यवाद लेकिन मुझे सुझाव नहीं चाहिए, मैं धूमकेतु का उपयोग करना चाहता हूं क्योंकि यदि यह समस्या हल हो जाती है तो यह स्वचालित रूप से मेरी कई समस्याएं हल कर देगी क्योंकि अन्य समस्या इस समस्या पर भरोसा करती है। ।धन्यवाद। –

1

अपनी स्क्रिप्ट सत्र का उपयोग करता है, तो आप इस तरह के व्यवहार को नोटिस सकता है। PHP स्क्रिप्ट पूर्ण होने तक सत्र फ़ाइल को लॉक करता है।

इसका मतलब यह है कि एक बार एक स्क्रिप्ट एक सत्र, किसी भी अन्य स्क्रिप्ट है कि एक ही सत्र आईडी का उपयोग कर एक सत्र शुरू करने के लिए प्रयास करता है अवरुद्ध है जब तक पिछले स्क्रिप्ट अवरोध समाप्त (या समाप्त हो जाता है) शुरू होता है।

इस के लिए वैकल्पिक हल किसी भी लंबी प्रक्रिया से पहले सत्र अनलॉक करने के लिए है:/लिखने किसी भी सत्र चर

  • कॉल session_start()
  • पढ़ने
  • कॉल session_write_close()
  • कर लंबा प्रसंस्करण
+0

सही मैं यह जानता हूं लेकिन मुझे नहीं पता कि केकफ़्पी तरीके से ऐसा कैसे करें। –

+0

मैंने प्रलेखन को देखा लेकिन किसी भी "करीबी" विधि को नहीं मिला। आप 'session_write_close' को स्वयं कॉल कर सकते हैं और देख सकते हैं कि इससे मदद मिलती है या नहीं। –