एक लूप में होने पर हर 10 सेकंड कॉल करें - PHP, सॉकेट, लूप, देरी

मूल रूप से, मेरे पास एक सॉकेट है और थोड़ी देर के लिए लूप लगातार इसे प्राप्त करने के लिए डेटा, इस तरह:

while (TRUE)
{
$read = fgets($fp); //get data
if (preg_match("/:(S+)[email protected]+ JOIN (#S+)/i", $read, $match)) { user_joined($match[1],    $match[2]); } //JOIN
if (preg_match("/:(S+)[email protected]+ PART (#S+)/i", $read, $match)) { user_parted($match[1], $match[2]); } //PART
if (preg_match("/:(S+)[email protected]+ PRIVMSG (#S+) :(.*)/i", $read, $match)) { inc_message($match[1], $match[2], $match[3]); } //MESSAGE
if (preg_match("/:[email protected]+ PRIVMSG $nick :(S+)/i", $read, $match)){jtv_error($match[1]);} //JTV WARNING
if (preg_match("/PING :.*/i", $read, $match)) { fwrite($fp, "PONG :$match[1]rn"); } //respond to server
}

अब, मैं कुछ vars को रीसेट करने के लिए हर 10 सेकंड में एक फंक्शन निष्पादित करना चाहता हूं। मैं वास्तव में लूप को अवरुद्ध किए बिना यह कैसे कर सकता हूं? अगर यह ०.१ सेकंड के लिए अवरुद्ध हो जाता है तो मैं मन नहीं करता हूं।

उत्तर:

जवाब के लिए 0 № 1

कोशिश करने पर PHP काफी खराब प्रदर्शन करती हैrealtime सामान। आप क्या कर सकते हैं लूप की शुरुआत से पहले समय मिल सकता है, अपने कोड के निष्पादित होने के बाद थोड़ा इंतजार करें (विशाल सीपीयू लोड को रोकने के लिए) और उसके बाद का समय प्राप्त करें:

$timeCursor = microtime(true);

while (TRUE)
{
$read = fgets($fp); //get data
if (preg_match("/:(S+)[email protected]+ JOIN (#S+)/i", $read, $match)) { user_joined($match[1],    $match[2]); } //JOIN
if (preg_match("/:(S+)[email protected]+ PART (#S+)/i", $read, $match)) { user_parted($match[1], $match[2]); } //PART
if (preg_match("/:(S+)[email protected]+ PRIVMSG (#S+) :(.*)/i", $read, $match)) { inc_message($match[1], $match[2], $match[3]); } //MESSAGE
if (preg_match("/:[email protected]+ PRIVMSG $nick :(S+)/i", $read, $match)){jtv_error($match[1]);} //JTV WARNING
if (preg_match("/PING :.*/i", $read, $match)) { fwrite($fp, "PONG :$match[1]rn"); } //respond to server

usleep(50000); // do nothing for 50 ms

$currentTime = microtime(true);
if ($timeCursor + 10 <= $currentTime) {
$timeCursor = $currentTime;
// here you can call a function every 10s
}
}

जवाब के लिए 0 № 2

इस देर से वापस आए लेकिन आप भी अपने पाश में ऐसा कुछ जोड़ सकते हैं

if(time() % 10 === 0) { /* your_func(); */ }

संबंधित सवाल
सबसे लोकप्रिय