Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
Страницы: (2) [1] 2  ( Перейти к первому непрочитанному сообщению )  
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Переподключение в синглтоне
GET  
 ۩  [x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



TERRAFORMING ENGINEER
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 3900
Пользователь №: 21196
На форуме: 15 лет, 18 дней
Карма: 88




Уважаемые знатоки.

Решил ретранслировать вопрос с чата.

Бывало ли в вашей практике, чтоб во время загрузки страницы где-нибудь на середине отваливалось соединение с БД, ну т.е. первые 1-2 запроса нормальные, а потом раз и отвалилось, несмотря что между ними доли секунды обычно? Понимаю, что нормальный класс соединения попытается перподключится, но все же, было хоть раз такое зафиксировано?

Взять классический синглтон:

class DBAccess{  

const DB_SERVER="localhost";
const DB_USER="root";
const DB_PASS="pass";
const DB_NAME="dbname";

private $_connection;
private static $_dbinstance;

/* Made the constructor private,
* to ensures that the class can only be instantiated
* from within itself.
*/

private function __construct(){
try{
$this->_connection= new mysqli(self::DB_SERVER,
self::DB_USER,
self::DB_PASS,
self::DB_NAME);
if ($this->_connection->connect_error){
throw new Exception("Could not connect to Database.");
}
}
catch(Exception $err){
echo $err->getMessage();
die();
}

}

public static function getConnection(){
if (is_null(self::$_dbinstance)){
self::$_dbinstance= new DBAccess();
}
return self::$_dbinstance;
}
/* Execute a SQL query and returns the results*/
public function selectQuery($query){
$rs=$this->_connection->query($query);
return $rs;
}
}


Какова вероятность возникновения этого события???
Цитата
if (is_null(self::$_dbinstance)){

Ну, конечно за исключение самого первого запуска.

Не могу сообразить объект создался идут запросы и вдруг он стал NULL. Какая причина и как часто такое может быть? Даже при большой загрузке сайта...просто кажется, что если уж объекты стали пропадать, то дело уже не до переподключений, вообще Ж**А всему проекту.

Нет? :)


--------------------
Не тот велик, кто не падал, а тот кто падал и поднимался.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
linker  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 5790
Пользователь №: 22814
На форуме: 14 лет, 8 месяцев, 22 дня
Карма: 264




Такое условие не сработает. На моей практике подобного не было, но если очень, но иногда, в скриптах, которые работают как демоны, я использую mysqli_ping() - проверяет соединение с сервером и выполняет реконнект если нужно.


--------------------
PMПисьмо на e-mail пользователюСайт пользователяICQ
    1   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
GET  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



TERRAFORMING ENGINEER
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 3900
Пользователь №: 21196
На форуме: 15 лет, 18 дней
Карма: 88




linker

Цитата
я использую mysqli_ping()


Спасибо!

Цитата
Проверяет работоспособность соединения с сервером. Если соединение разорвано, а глобальная настройка mysqli.reconnect включена, PHP попытается автоматически переподключиться.


Я так понял в настройках должна быть включено, чтоб помнить параметры подключения.


--------------------
Не тот велик, кто не падал, а тот кто падал и поднимался.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
linker  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 5790
Пользователь №: 22814
На форуме: 14 лет, 8 месяцев, 22 дня
Карма: 264




ABC
Он и так помнит, просто если эта настройка включена, то автоматом переподключается.


--------------------
PMПисьмо на e-mail пользователюСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
GET  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



TERRAFORMING ENGINEER
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 3900
Пользователь №: 21196
На форуме: 15 лет, 18 дней
Карма: 88




Спасибо.


--------------------
Не тот велик, кто не падал, а тот кто падал и поднимался.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
inpost  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Помагите Здесь живу!!!
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 23010
Пользователь №: 20039
На форуме: 15 лет, 3 месяца, 13 дней
Карма: 623




Я работал с mysql, там отрубалось через Х времени из-за какой-то там настройки. То есть если Х времени с БД не работали (или Х времени после запуска), то она отрубается.
Я в итоге сделал реконнект в самой функции запроса. Но это было только на одном скрипте и на одном сервере и очень давно, поэтому я толком написал костыль и забил на это дело.
О подробностях не вспомню, я был слишком юн тогда)


--------------------
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
PMПисьмо на e-mail пользователюICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
GET  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



TERRAFORMING ENGINEER
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 3900
Пользователь №: 21196
На форуме: 15 лет, 18 дней
Карма: 88




inpost

Ну здесь же после каждого запуска скрипта создается объект т.е. переподключение к БД происходит так ведь? Даже обычно так и есть наверное у большинства.


--------------------
Не тот велик, кто не падал, а тот кто падал и поднимался.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
inpost  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Помагите Здесь живу!!!
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 23010
Пользователь №: 20039
На форуме: 15 лет, 3 месяца, 13 дней
Карма: 623




ABC
Я тебя не понял.


--------------------
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
PMПисьмо на e-mail пользователюICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
GET  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



TERRAFORMING ENGINEER
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 3900
Пользователь №: 21196
На форуме: 15 лет, 18 дней
Карма: 88




Цитата
Я работал с mysql, там отрубалось через Х времени из-за какой-то там настройки. То есть если Х времени с БД не работали (или Х времени после запуска), то она отрубается.


Я тоже не могу понять, ты имеешь ввиду постоянное соединение с БД? Без quit, например, если префикс "p" поставить:
'p:localhost'?


--------------------
Не тот велик, кто не падал, а тот кто падал и поднимался.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
inpost  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Помагите Здесь живу!!!
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 23010
Пользователь №: 20039
На форуме: 15 лет, 3 месяца, 13 дней
Карма: 623




ABC
Я про обычное подключение говорил. А ты про постоянное?


--------------------
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
PMПисьмо на e-mail пользователюICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
GET  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



TERRAFORMING ENGINEER
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 3900
Пользователь №: 21196
На форуме: 15 лет, 18 дней
Карма: 88




inpost
Тоже нет. smile.gif

Но ведь запуск 1 страницы:
Connect
query1
query2
...
queryN
Quit

Запуск 2 страницы:
Connect
query1
query2
...
queryN
Quit

т.е. переподключение к БД происходит так ведь?


--------------------
Не тот велик, кто не падал, а тот кто падал и поднимался.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Valick  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 6460
Пользователь №: 35718
На форуме: 12 лет, 4 месяца, 1 день
Карма: 208




Цитата
т.е. переподключение к БД происходит так ведь?

да
это для вас это страницы 1 и 2, а для сервера все как "день сурка", апачу все равно какая у вас там страница smile.gif


--------------------
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
GET  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



TERRAFORMING ENGINEER
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 3900
Пользователь №: 21196
На форуме: 15 лет, 18 дней
Карма: 88




Valick

Спасибо.


--------------------
Не тот велик, кто не падал, а тот кто падал и поднимался.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Invis1ble  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме




******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 12174
Пользователь №: 23195
На форуме: 14 лет, 7 месяцев, 27 дней
Карма: 441

Трезвый :
15 лет, 6 месяцев, 27 дней


ABC
Если коннект отвалится, то в self::$_dbinstance все равно будет объект, так что вот этот блок:
  if (is_null(self::$_dbinstance)){  
self::$_dbinstance= new DBAccess();
}

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


--------------------
PMПисьмо на e-mail пользователюСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
GET  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



TERRAFORMING ENGINEER
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 3900
Пользователь №: 21196
На форуме: 15 лет, 18 дней
Карма: 88




Invis1ble

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

Почему не сделать обычный статический класс с mysqli тем более сам mysqli защен от клонирования, хотя я вообще например, слабо понимаю, как можно изменить подключение БД извне. В смысле я понимаю конечно, как, но тогда весь сайт уже во власти неприятия какой весь смысл этих танцев с бубном?

Такое чувство, что его однажды написали для какой нибудь MySQL 4 под php 4 и с тех пор он качует по сайтам с разными дополнениями. Раньше в нем были методы __clone и __wakeup сейчас убрали....кто-то массив прикручивает, кто-то константы в настройке, кто еще какие обертки для запросов, но один х*р, везде эта безсмысленная строчка с нулевым объектом, которая проверяется при каждом запросе в БД, когда она должна быть просто инициатором запуска коннекта в каком-то другом инициализирующем методе.


--------------------
Не тот велик, кто не падал, а тот кто падал и поднимался.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

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

Опции темыСтраницы: (2) [1] 2  Ответ в темуСоздание новой темыСоздание опроса