क्या वर्डप्रेस हार्टबीट एपीआई 'बीट्स' कंपित है या वे सभी उपयोगकर्ताओं के लिए एक साथ होते हैं?


14

AJAX कॉल को चलाने के लिए वर्डप्रेस हार्टबीट एपीआई एडमिन-ajax.php का उपयोग करता है। यदि उपयोगकर्ता X अपना ब्राउज़र खुला छोड़ता है, तो सर्वर पर कई कॉल किए जाएंगे, जिसमें 'बीट' होने पर प्रत्येक कॉल होगी। अब यदि उपयोगकर्ता Y अपना ब्राउज़र खुला छोड़ता है, तो सर्वर पर कई और कॉल किए जाएंगे, इनमें से प्रत्येक कॉल तब होती है जब कोई 'बीट' होता है। यह संभव है कि एक बड़ी वेबसाइट में उपयोगकर्ता A, उपयोगकर्ता B और उपयोगकर्ता C सभी समान हों।

मेरा प्रश्न:

बहुत से उपयोगकर्ताओं को एक साथ एक वेबसाइट का उपयोग करने पर विचार करते हुए, वर्डप्रेस हार्टबीट एपीआई 'बीट्स' कंपित हो जाता है (उपयोगकर्ता वाई के लिए 'बीट' उपयोगकर्ता वाई के लिए 'बीट' से कुछ सेकंड पहले होता है) या वास्तव में एक ही 'बीट' होता है सभी उपयोगकर्ताओं के लिए समय?

यदि 'बीट' कंपित नहीं है, तो मेरी चिंता उस समय सर्वर पर एक बहुत भारी भार है जब एक 'बीट' होता है।


मुझे इसका उत्तर नहीं पता है, हालांकि यह दिलचस्प है। मुझे लगता है कि आप कई ब्राउज़रों / कंप्यूटरों से व्यवस्थापक क्षेत्र में प्रवेश करके और दिल की धड़कन अनुरोधों के अनुसार और PHP स्क्रिप्ट के निष्पादन के अनुसार, कुछ हद तक इस लेख में उल्लिखित करके एक बुनियादी परीक्षण कर सकते हैं ।
निकोलई

@ialocin मैंने इसे चेक करने के लिए कुछ दिन पहले एक टिक लकड़हारा सक्रिय किया था, लेकिन मैं तब इसे बंद करना भूल गया था जब मैंने आज इसकी जाँच की, तो टिक की मात्रा काफी डरावनी थी; ;-)
birgire

मैं कल्पना कर सकता हूं कि वे जल्दी से जमा हो रहे हैं। आपके उत्तर से उदाहरण मुझे लगता है कि एक अच्छा विचार देता है .. @birgire
निकोलाई

जवाबों:


7

मुझे लगता है कि धड़कन स्वभाव से कंपित होती है, क्योंकि अगले टिक को फ़ाइल में विधि के time()भीतर ब्राउज़र समय द्वारा निर्धारित किया जाता है :scheduleNextTick()/wp-includes/js/heartbeat.js

 var delta = time() - settings.lastTick,
     interval = settings.mainInterval;

जहां यह setTimeoutफ़ंक्शन के साथ अगले टिक को शेड्यूल करने के लिए उपयोग किया जाता है :

if ( delta < interval ) {
    settings.beatTimer = window.setTimeout(
        function() {
            connect();
        },
        interval - delta
     );
} else {
    connect();
}

ब्राउज़र समय के रूप में परिभाषित किया गया है:

function time() {
   return (new Date()).getTime();
}

connect()विधि ajax कॉल और उपयोग करता है शामिलalways()

.always( function() {
    settings.connecting = false;
    scheduleNextTick();
})

अगले टिक को शेड्यूल करने के लिए।

उपलब्ध टिक अंतराल 5s, 15s, 30s और 60s हैं।

बड़ी संख्या में सक्रिय उपयोगकर्ताओं के लिए, एक छोटे से टिक अंतराल के साथ, धड़कन एक साथ हो सकता है।

कुछ डेटा रखना हमेशा अच्छा होता है, इसलिए आप heartbeat_tickहुक से लॉग इन करने वालों से टिक हटा सकते हैं :

add_action( 'heartbeat_tick', 
    function(  $response, $screen_id  )
    {
        $file =  WP_CONTENT_DIR . '/ticks.log'; // Edit this filepath to your needs.

        if( file_exists( $file ) && is_writeable( $file ) ) 
        {
            file_put_contents( 
                $file, 
                sprintf( "%s - Tick from user_id : %d - from screen_id : %s" . PHP_EOL,
                    date( 'c' ),
                    get_current_user_id(),
                    $screen_id
                ), 
                FILE_APPEND | LOCK_EX 
            );
        }
    }
, 11, 2 ); 

यहाँ ticks.logफ़ाइल से एक उदाहरण है :

2014-09-01T12:41:04+00:00 - Tick from user_id : 1 - from screen_id : edit-post
2014-09-01T12:41:19+00:00 - Tick from user_id : 1 - from screen_id : edit-post
2014-09-01T12:41:34+00:00 - Tick from user_id : 1 - from screen_id : edit-post
2014-09-01T12:41:56+00:00 - Tick from user_id : 1 - from screen_id : post
2014-09-01T12:42:11+00:00 - Tick from user_id : 1 - from screen_id : post
2014-09-01T12:42:20+00:00 - Tick from user_id : 3 - from screen_id : upload
2014-09-01T12:42:38+00:00 - Tick from user_id : 1 - from screen_id : post
2014-09-01T12:43:05+00:00 - Tick from user_id : 1 - from screen_id : post
2014-09-01T12:43:08+00:00 - Tick from user_id : 3 - from screen_id : attachment
2014-09-01T12:43:20+00:00 - Tick from user_id : 1 - from screen_id : post
2014-09-01T12:43:36+00:00 - Tick from user_id : 1 - from screen_id : post
2014-09-01T12:44:17+00:00 - Tick from user_id : 3 - from screen_id : profile

इतने विस्तृत उत्तर के लिए धन्यवाद। मेरी समझ में एक चक्र के लिए दो धड़कन हैं । प्रारंभिक बीट जो ब्राउज़र द्वारा निर्धारित की जाती है और फिर रिटर्न बीट होती है । यह आपके उत्तर से स्पष्ट है कि प्रारंभिक हरा कंपित है। क्या रिटर्न बीट (जो सर्वर से डेटा को ब्राउज़र में वापस भेजता है) भी कंपित है?
henrywright
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.