Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Подскажите ход событий. 
V
    Опции темы
Predator199
Дата 16.11.2012, 21:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 412
Регистрация: 1.2.2012

Репутация: -3
Всего: -4



Вообщем щас у меня глупо сделано.
Что нужно, есть 1000 серверов бд. Мне нужно получить от каждого данные.
Только начал писать, сделал глупо.
Использую цыкл, чтоб взять адрес сервера. Далее в цикле выполняю необходимые действия и заношу в массив.И так с каждым сервером. То есть на один сервер уходит около 2-4 сек. Подскажите как быть, так чтоб скрипт выполнялся к примеру за 10 сек не зависимо сколько серверов в бд.
Вообщем вот мой бред, подскажите как и что лучше будит.

Код

        include_once 'includes/server.functions.php';
        $resu = mysql_query("SELECT * FROM `servers`");
        while ($ro = mysql_fetch_assoc($resu)) {
            $lists = explode(":", $ro['address']);
            $gametype = $ro['gametype'];
            $gamename = $ro['gamename'];                    
            $live = server_query_live("halflife", $lists[0], $lists[1], "s");
            if ($live['b']['status']){
                $status = '1';
                $map = $live['s']['map'];
                $hostname = $live['s']['name'];    
                $playersmax = $live['s']['playersmax'];
                $players = $live['s']['players'];
                
                    if(file_exists("uploads/maps/".$gametype."/".$map.".jpg")) {
                       $maps = "images/maps/".$gametype."/".$map.".jpg";
                    }else
                       $maps = "images/maps/".$gametype."/noimage.png";

                    //OБновление данных о игроках//
                    if($players>=1){
                        $live = server_query_live("halflife", $lists[0], $lists[1], "sp");        
                        $sekret = 0;
                        $ff = array();
                        foreach ($live['p'] as $v){
                           $ff[$sekret]['name'] = $v['name'];
                           $ff[$sekret]['frag'] = $v['score'];
                           $ff[$sekret]['time'] = $v['time'];
                           $sekret++;
                        }
                           $playe[] = array(
                               'id' => $ro['id'],
                               'playe' => $ff,
                            );
                    }
    
            } else {
                $status = '0';
                $hostname = 'Сервер выключен';
                $playersmax = '-';
                $players='-';
                $maps = "uploads/maps/".$gametype."/noimage.png";
            }
                
            $servers[] = array(
                'id' => $ro['id'],
                'map' => $map,
                'address' => $ro['address'],
                'hostname' => $hostname,
                'gametype' => $gametype,
                'gamename' => $gamename,
                'playersmax' => $playersmax,
                'players' => $players,
                'maps' => $maps,
                'status' =>$status,    
                'city' =>$ro['city'],    
                'country' =>$ro['country'],
            );                    
        }
        file_put_contents('cache/monitoring.tmp', serialize($servers));
        file_put_contents('cache/monitoring_pl.tmp', serialize($playe));

 smile 
PM MAIL   Вверх
Redee
Дата 16.11.2012, 22:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 26.12.2010

Репутация: нет
Всего: нет



может тут явно указать индекс / название ячейки массива в которой еще массив
Код

$servers[] = array(


то есть к примеру так или как то по другому, чтобы на будущее знать к чему обращаться, а не высчитывать >
Код

$servers['serv_info'] = array(


траляяяяяяяяя, конечно лоло совет но все же  smile  smile  smile 
PM MAIL   Вверх
Sanchezzz
Дата 17.11.2012, 09:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1670
Регистрация: 19.11.2006
Где: Voronezh

Репутация: 41
Всего: 60



Может стоить переделать принцем работу опроса серверов. Опешите логику выполнения чего вы хотели добиться опрашивая 2+ серверов за раз в цикле.


--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
Predator199
Дата 17.11.2012, 13:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 412
Регистрация: 1.2.2012

Репутация: -3
Всего: -4



Скрипт он у меня работает, но долго очень.
Из бд беру адрес сервера, что за игра. И сокр игр. От серверов я получаю карту, сколько и скок максимум игроков.Название сервера, список игроков.

Это сообщение отредактировал(а) Predator199 - 17.11.2012, 13:22
PM MAIL   Вверх
Sanchezzz
  Дата 17.11.2012, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1670
Регистрация: 19.11.2006
Где: Voronezh

Репутация: 41
Всего: 60



Цитата

Скрипт он у меня работает, но долго очень.

Ну это понятно 
Открыть закрыть соединении с сервером уже почти одна секунда. Сделать запрос получить данные +1 а если на сервере БД нагрузка то вот и еще плюс время.

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

Опрашивать 1000 серверов одним запускам сам должны понимать не вариант.
Либо порциями либо что бы игра сама говорила о статистике  можно еще лучше соединить 2 варианта.

Не попробуешь не узнаешь.

Это сообщение отредактировал(а) Sanchezzz - 17.11.2012, 15:18


--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
Predator199
Дата 17.11.2012, 15:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 412
Регистрация: 1.2.2012

Репутация: -3
Всего: -4



Спс.
PM MAIL   Вверх
Aliance
Дата 19.11.2012, 10:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 14
Всего: 137



Такие вещи нужно делать вообще по-другому. Нужно использовать совокупность очередей и крона, чтобы все тяжелые операции делались в фоновом режиме, а в live-статистике брались уже подготовленные (возможно не совсем актуальные) данные. Если сейчас скрипт работает, скажем, 4 секунды, то ставим выполнение крона каждые 5 минут и будем иметь практически live-данные, которые будут читаться из кеша мгновенно даже при большом кол-ве соединений.
PM MAIL WWW ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1012 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.