Вопросы, советы, возможные модификации и вообще все про модуль статистики кланов

Модератор: Exinaus, shw

#67778 Exinaus 06 май 2014, 08:19
__Ars___ писал(а):Exinaus, Модуль не домо, а разница в чём? Ну вставил ID приложения, разницы не почувствовал...

А что вы должны были почуствовать? Ну или что ожидали? Что в вашем пердставлении должен изменить ввод ID приложения?
#67780 Exinaus 06 май 2014, 08:39
abagrov писал(а):Уже неоднократно замечаю такую вот ситуацию.
Понятно, что это связанно с ограничениями хостинга. Но можно сделать как-нибудь так, чтобы модуль не светил логин и пароль?

Ядрена кочерыжка. Конечно уберем.
В смысле, попробуем сделать так что бы это окно не отображалось при ошибках соединения с БД.

ЗЫ. На гитхабе версия где есть исправления, попробуйте ее установить. Если ситуация повторится - сообщите.
#67782 abagrov 06 май 2014, 10:10
Exinaus писал(а):ЗЫ. На гитхабе версия где есть исправления, попробуйте ее установить. Если ситуация повторится - сообщите.

Спасибо. Будем тестить.
Но тут возникает другой вопрос. Почему модуль, который в принципе грузится в один поток, открывает столько скул коннектов? Может это так аякс табы отрабатывают? И главное, можно ли от этого в принципе избавиться?
#67791 Exinaus 06 май 2014, 12:01
Это уже проблемы реализации PDO (причем не только в php).
В PDO не существует функции дисконекта, как таковой. Т.е. принудительного, немедленного, закрытия установленного соединения с БД.
Конечно разработчики утверждают что закрыть конект довольно просто, например вот так:
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
// здесь мы каким-то образом используем соединение

// соединение больше не нужно, закрываем
$dbh = null;


Но маленький финт ушами, в виде вот такого:
$pdo = new PDO('mysql:host=localhost;dbname=test', $user, $pass);

// здесь мы каким-то образом используем соединение
$stmt = $pdo->prepare('SELECT * FROM sometable');
$stmt->execute();

// соединение больше не нужно, закрываем
$pdo = null;

//тот самый финт ушами, простое ожидание на 60 секунд
sleep(60);


И ваш конект к базе данных останется живым в течении 60 секунд, не смотря на то что мы его закрыли. А просто потому что скрипт еще не завершил свою работу.

Сейчас в модуле соединения держатся живыми в течении 120 секунд (это делается принудительно). Это было сделано давно, и вроде это было по причине того, что на хостингере при большом интервале между запросами появлялась ошибка соединения с БД.
Т.е. шли начальные запросы в БД с установкой кодировок и прочего, потом был некоторый момент простоя, для получения данных из АПИ ВГ, и когда скрипт опять пытался соединиться с БД, для внесения полученных данных (тогда данные хранились прямо в БД а не в кэше как сейчас) их сервер думал что соединение уже прервано. И отваливался с ошибкой.

Так что похоже на то, что ошибку создают аякс вкладки. Которые по сути отдельно выполняемые скрипты, которые тоже устанавливают соединение с БД.
Но сами понимаете, если убрать поддержание соединения в течении 120 секунд, опять вылезет ошибка, с отваливающейся БД. Палка о двух концах, хех.

Есть несколько вариантов работы над данной проблемой (в данный момент я вижу как минимум два).
Можно попробовать постоянные соединения, которые кэшируются, и тогда аякс вкладки должны пытаться использовать уже открытое соединение, а не создавать новое. Но это теория, на практике боюсь все будет не так гладко. Там тоже есть свои подводные камни :(.
Можно создать функцию, которая будет вызываться в конце работы скрипта, и обрывать соединение с бд, освобождая слот.
В общем, надо проверить все это, и совместимы ли эти методы. И какие результаты они дадут. Т.к. до этого о подобных проблемах пока еще не сообщали, и в этом направлении мы еще не работали.
#67801 abagrov 06 май 2014, 15:15
Exinaus писал(а):<skip>
Так что похоже на то, что ошибку создают аякс вкладки. Которые по сути отдельно выполняемые скрипты, которые тоже устанавливают соединение с БД.
Но сами понимаете, если убрать поддержание соединения в течении 120 секунд, опять вылезет ошибка, с отваливающейся БД. Палка о двух концах, хех.
<skip>

Добавлю, что убирать 120 секунд бессмысленно. Так как ошибка с коннектом проявляется именно в момент загрузки модуля. А модуль грузиться максимум что я видел секунд 10 (не считая времени отработки скриптов jquery на стороне клиента).
И проблема действительно в ajax страницах, которые загружают данные на этапе начальной загрузки. Например таб "Техника".

Решение.
Тут не давно кто то уже предлагал весь модуль переделать в ajax табы с загрузкой по требованию. Т.е. по факту в начале никаких данных в модуле почти нет. Пользователь нажал кнопку таба - данные подгрузились. Такой вариант был бы наиболее выгоден с точки зрения пользователя: быстрая начальная загрузка за счёт минимального применения jquery, минимальный начальный траффик, обычно все смотрят 1-2 вкладки (динамика игрока, состав). С серверной стороны вобщем то тоже всё Ок. Пользователей не так много. И увеличение нагрузки не должно стать катастрофой.

Но как минимум уже сейчас надо бы отключить подгрузку на начальном этапе таких табов как "Техника" (кстати, я уже давно прошу там сделать добавочный фильтр по названию танка, может под шумок чего как ;) ). Таким образом у нас при начальной загрузке останется всего 2 коннекта к БД: модуль и блок новостей.
#67814 abagrov 06 май 2014, 18:43
Exinaus писал(а):ЗЫ. На гитхабе версия где есть исправления, попробуйте ее установить. Если ситуация повторится - сообщите.

Обновился. Не могу теперь войти в админку. Ни через \admin, ни через "вход" с модуля. Логин/пароль принимает и вываливается с такой вот ошибкой.
Изображение
Проблему внёс какой то из коммитов начиная с f052ddf4ef272449938af43d47aac07e575bf3bb от Apr 19, 2014
#67816 Exinaus 06 май 2014, 19:21
Попробуйте этот файл including/check.php загрузить заново на хостинг. У меня все работает нормально :\
#67841 abagrov 07 май 2014, 06:48
Exinaus писал(а):Попробуйте этот файл including/check.php загрузить заново на хостинг. У меня все работает нормально :\

Вот я [цензура] :shock: Так получилось, что пришлось кое что блокнотом подправить, ну и:
Код: Выделить всёï»¿<?php

Теперь всё Ок. Ложная тревога :oops:

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 48

Реклама | Adv