Стата в мс, разбираем от куда такие цифры.

Тема в разделе "Мастерсервер(Masterserver)", создана пользователем jesuspunk, 29 июн 2016.

  1. jesuspunk

    jesuspunk Администратор Команда форума

    Всем доброго дня, мне в очередной раз пытаются доказать, что стата в моем мс считается неправильно и не так, поэтому я решил разобрать все по полочкам, и так начнем:

    1) Откуда у меня столько запросов, такого не может быть! Вот пару скринов: на первом видим стату в 3 ляма запросов при 300 униках(за час), вторая стата при 197 униках тоже 3 ляма(за сутки).
    2969e9b3d4.jpg 2016-06-29_08-18-26.png
    Разбираем как такое получается:
    1) Стоит режим noping, т.е. клиенту игры не отдается конец списка серверов и он шлет N запросов в секунду к мс!
    2) Количество запросов в секунду зависит от настроек клиента игры и включенной или отключенной вертикальной синхронизации. Как известно игроки любят себе прописать fps_max 500 или 1000, чтобы в клиенте было 100500 фпс в секунду, получаем и количество запросов N в секунду при режиме noping. Т.е. 1 клиент с прописанными fps_max 100 создаст ~ 100 запросов, а с fps_max 1000 и отключенной вертикальной синхронизацией ~ 1000. Я написал генератор логов, в который можно подставить значения для проверки как же считается стата в мс у меня. Качаем:http://non-steam.ru/forum/index.php...9/&temp_hash=b1697b1e7c983042acd73f38c7d0d2ea

    Задаем параметры в log_gen.cfg UNICS_COUNT = 300 уников, минимальное количество от 1 уника выставляем в MIN_QUERY = 500 по формуле 100 fps ждал 5 секунд вывода до конца сипска серверов не дождался тыркнул по de_dust_2x2 и максимальное MAX_QUERY = 60000 игрок с 1000 fps ждал минуту когда же ему все выведут, оставляем RANDOM_HOUR = 0 это сгенерирует лог для текущего часа. Генератор логов создает лог файл ~ на 6-7 мб что в диапазоне 200-300к запросов, генератор выдает по 666-1000 запросов на 300 уников, а у нас 3.000.000 запросов при 300 униках, а это по 10к запросов с каждого, в генераторе не учтено кол-во игроков с 1000 fps, и количество раз использования игроком поиска, может ему сервер не понравился и он искал еще N раз подходящий из чего получается что на 3 ляма 300 уников генерирует в среднем по 10к запросов каждый.

    3) Если такие цифры смущают специально сделал Simple dos protection (SDP в ms.cfg) при значение 2 (блокировка по IP+port) 1 игрок за 10 секунд создаст в логе всего 3-4 запроса.

    И самое главное почему так мало уников не может быть, опять же через генератор проверяется сколько было задано, столько мастер сервер и посчитал, но на всякий случай я приложу сюда код подсчета чтобы все сомнения развеялись в пух и прах:

    Код:
        print "Start parsing standart log ..."
    # для каждой строчки лога персер выглядит так:
        for line in f.readlines():
            try:
                try:
    # разбираем строку на час, игру и ip и другие составляющие
                        h,m,s, ip, port,game = line.strip('\n\r').split(' ')
                except Exception, e:
                        if 'too many values' in str(e):
                                try:
                                        msport,h,m,s, ip, port,game = line.strip('\n\r').split(' ')
                                except Exception, e:
                                        print "msstats error = "+str(e)
    # добавляем в почасовой(+уникальный) словарь игру и какой час если нету в словаре
                if (game,h) not in hourdict:
                    hourdict[game,h] = 0
                    uhourdict[game,h] = set()
    # добавляем в суточный(+уникальный) словарь игру если нету
                if game not in daydict:
                        daydict[game] = 0
                        udaydict[game] = set()
    # проверяем есть ли в почасовом уникальном словаре уникальный ip адрес, если нет то добавляем
                if str(ip) not in uhourdict[game,h]:
                        uhourdict[game,h].add(ip)
    # проверяем есть ли в суточном уникальном словаре уникальный ip адрес, если нет то добавляем
                if str(ip) not in udaydict[game]:
                        udaydict[game].add(ip)
    # добавляем по 1 запросу за час и за сутки, для игры в почасовой и суточный словарь
                hourdict[game,h] += 1
                daydict[game] += 1
     

    Вложения:

    • log_gen.rar
      Размер файла:
      2,9 МБ
      Просмотров:
      50
    Последнее редактирование: 29 июн 2016