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

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

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



TERRAFORMING ENGINEER
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 3890
Пользователь №: 21196
На форуме: 7 лет, 2 месяца, 20 дней
Карма: 87




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

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

Бывало ли в вашей практике, чтоб во время загрузки страницы где-нибудь на середине отваливалось соединение с БД, ну т.е. первые 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
На форуме: 6 лет, 10 месяцев, 24 дня
Карма: 264




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


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

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



TERRAFORMING ENGINEER
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 3890
Пользователь №: 21196
На форуме: 7 лет, 2 месяца, 20 дней
Карма: 87




linker

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


Спасибо!

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


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


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

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



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

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




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


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

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



TERRAFORMING ENGINEER
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 3890
Пользователь №: 21196
На форуме: 7 лет, 2 месяца, 20 дней
Карма: 87




Спасибо.


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

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



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

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




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


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

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



TERRAFORMING ENGINEER
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 3890
Пользователь №: 21196
На форуме: 7 лет, 2 месяца, 20 дней
Карма: 87




inpost

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


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

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



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

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




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


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

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



TERRAFORMING ENGINEER
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 3890
Пользователь №: 21196
На форуме: 7 лет, 2 месяца, 20 дней
Карма: 87




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


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


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

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



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

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




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


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

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



TERRAFORMING ENGINEER
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 3890
Пользователь №: 21196
На форуме: 7 лет, 2 месяца, 20 дней
Карма: 87




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

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

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

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


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

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



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

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




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

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


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

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



TERRAFORMING ENGINEER
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 3890
Пользователь №: 21196
На форуме: 7 лет, 2 месяца, 20 дней
Карма: 87




Valick

Спасибо.


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

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




******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 11932
Пользователь №: 23195
На форуме: 6 лет, 9 месяцев, 29 дней
Карма: 435

Трезвый :
7 лет, 8 месяцев, 29 дней


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

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


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

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



TERRAFORMING ENGINEER
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 3890
Пользователь №: 21196
На форуме: 7 лет, 2 месяца, 20 дней
Карма: 87




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  Ответ в темуСоздание новой темыСоздание опроса