The block sends per client is 1/2 when reaching the maximal player count.
[**Advanced]
# Maximum number of blocks that are simultaneously sent per client.
+# The maximum total count is calculated dynamically:
+# max_total = ceil((#clients + max_users) * per_client / 4)
max_simultaneous_block_sends_per_client (Maximum simultaneous block sends per client) int 10
-# Maximum number of blocks that are simultaneously sent in total.
-max_simultaneous_block_sends_server_total (Maximum simultaneous block sends total) int 40
-
# To reduce lag, block transfers are slowed down when a player is building something.
# This determines how long they are slowed down after placing or removing a node.
full_block_send_enable_min_time_from_building (Delay in sending blocks after building) float 2.0
### Advanced
# Maximum number of blocks that are simultaneously sent per client.
+# The maximum total count is calculated dynamically:
+# max_total = ceil((#clients + max_users) * per_client / 4)
# type: int
# max_simultaneous_block_sends_per_client = 10
-# Maximum number of blocks that are simultaneously sent in total.
-# type: int
-# max_simultaneous_block_sends_server_total = 40
-
# To reduce lag, block transfers are slowed down when a player is building something.
# This determines how long they are slowed down after placing or removing a node.
# type: float
*/
void ResendBlockIfOnWire(v3s16 p);
- s32 SendingCount()
- {
- return m_blocks_sending.size();
- }
+ u32 getSendingCount() const { return m_blocks_sending.size(); }
// Increments timeouts and removes timed-out blocks from list
// NOTE: This doesn't fix the server-not-sending-block bug
settings->setDefault("strict_protocol_version_checking", "false");
settings->setDefault("player_transfer_distance", "0");
settings->setDefault("max_simultaneous_block_sends_per_client", "10");
- settings->setDefault("max_simultaneous_block_sends_server_total", "40");
settings->setDefault("time_send_interval", "5");
settings->setDefault("default_game", "minetest");
std::vector<PrioritySortedBlockTransfer> queue;
- s32 total_sending = 0;
+ u32 total_sending = 0;
{
ScopeProfiler sp2(g_profiler, "Server: selecting blocks for sending");
if (!client)
continue;
- total_sending += client->SendingCount();
+ total_sending += client->getSendingCount();
client->GetNextBlocks(m_env,m_emerge, dtime, queue);
}
m_clients.unlock();
std::sort(queue.begin(), queue.end());
m_clients.lock();
- s32 max_blocks_to_send =
- g_settings->getS32("max_simultaneous_block_sends_server_total");
+
+ // Maximal total count calculation
+ // The per-client block sends is halved with the maximal online users
+ u32 max_blocks_to_send = (m_env->getPlayerCount() + g_settings->getU32("max_users")) *
+ g_settings->getU32("max_simultaneous_block_sends_per_client") / 4 + 1;
for (const PrioritySortedBlockTransfer &block_to_send : queue) {
- //TODO: Calculate limit dynamically
if (total_sending >= max_blocks_to_send)
break;
RemotePlayer *getPlayer(const u16 peer_id);
RemotePlayer *getPlayer(const char* name);
+ u32 getPlayerCount() const { return m_players.size(); }
static bool migratePlayersDatabase(const GameParams &game_params,
const Settings &cmd_args);