WordPress的心跳API“节拍”是交错的,还是对所有用户同时发生?

时间:2014-08-28 作者:henrywright

WordPress心跳API使用管理ajax。php来运行AJAX调用。如果用户X打开浏览器,将向服务器发出许多呼叫,每次呼叫都是在“节拍”时进行的。现在,如果用户Y打开浏览器,将向服务器发出更多的调用,每次调用都会在有“节拍”时发生。一个大型网站也可能会有用户a、用户B和用户C都这样做。

My question:

考虑到许多用户可能同时访问一个网站,WordPress心跳API的“节拍”是交错的(用户X的“节拍”发生在用户Y的“节拍”之前几秒钟),还是所有用户的“节拍”发生在完全相同的时间?

如果“beat”不是交错的,我担心的是在“beat”发生时服务器上的负载会非常重。

1 个回复
最合适的回答,由SO网友:birgire 整理而成

我认为节拍本质上是交错的,因为下一个节拍是由浏览器时间决定的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();
}
Theconnect() 方法包含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

结束

相关推荐

How to create tag.php

如何创建标记。php模板,将适用于每个包含标签的帖子?我创建了一些标签,如=食物、饮料和水果贴子1有食品和饮料标签帖子2有食物和水果标签如何为这些标签帖子创建一个页面?我的代码看起来像这样,但没有显示任何内容。function get_tags_post($tag_name){ $original_query = $wp_query; $wp_query = null; $brand_name= $tag_name; $args=array(