Конференция "Базы" » Зависает программа после обрыва сетевого соединения с БД [D7, MySQL]
 
  • Ega23 © (15.10.13 22:55) [20]

    > Но мне кажется было бы правильно, если сам запрос просто
    > выдавал бы исключение в случае потери связи и все.


    А откуда он узнает, что произошёл именно обрыв связи?
    Реальный пример из реальной жизни: система проработала 5 лет в режиме 24х7, потребовалось "ужать" устаревшие данные. Скрипт работал примерно 4 часа. Результат выполнения - select result = @result;
  • sniknik © (16.10.13 07:56) [21]
    > А откуда он узнает, что произошёл именно обрыв связи?
    сетевое соединение обычно знает, что оно разорвано... если коннект установлен/устанавливается через сеть,  то почему бы ему не знать? ... не UDP же они используют.
  • Ega23 © (16.10.13 09:08) [22]

    > сетевое соединение обычно знает, что оно разорвано...

    Это если оно штатно разорвано. А если нет, то зависит от реализации: шлётся там внутри handshake или нет.
    Я пока ни одного коннекшена не знаю, у которого бы было такое событие.
  • brother © (16.10.13 09:27) [23]
    > сетевое соединение обычно знает, что оно разорвано

    где, как? имхо узнаем, по таймауту только...
  • brother © (16.10.13 09:29) [24]
    хотя по модели osi, сетевая может сказать, что коннекшин лост, но это под вопросом...
  • sniknik © (16.10.13 09:45) [25]
    > Это если оно штатно разорвано.
    а если оно держится внутри драйвера то как ADO в синхронном режиме поймет это, не получив управления?

    > но это под вопросом...
    для informix-а и mssql вопроса нет... а вот для mysql почему то есть... и вывод? сокет не знает, что его "разорвали"? чушь.
  • brother © (16.10.13 09:46) [26]
    разорвали или помехи на канале, как определить? таймаут!
  • Ega23 © (16.10.13 10:16) [27]

    > сокет не знает, что его "разорвали"?


    Я на минуточку не понял: а что, сокет сам регулярный пинг делает?
  • sniknik © (16.10.13 10:44) [28]
    если тип не дейтаграмы (UDP) то да
  • Ega23 © (16.10.13 10:59) [29]
    О как... А я был уверен, что это дело самому надо реализовывать.
  • brother © (16.10.13 11:11) [30]
    > то да

    а можно подробнее, я чет тож в первый раз слышу об этом
  • sniknik © (16.10.13 12:03) [31]
    и гугль в первый раз видишь?
    первая же ссылка по протоколу
    http://www.xnets.ru/plugins/content/content.php?content.217.5
    смотри к примеру раздел "гарантированная доставка", и там про служебную информацию.
  • brother © (16.10.13 13:49) [32]
    вот не вижу там реализацию ping в tcp протоколе! то, что ответом от клиента приходит подтверждение, так это понятно...
  • sniknik © (16.10.13 15:23) [33]
    не знаю чего ты там не видишь, а пинг это всего лишь "прозвон" коннекта/соединения... (подтверждение друг для друга)
    то ты в него "не веришь", а то тебе это понятно, а ping очевидно должен означать утилиту для юзера.
  • brother © (16.10.13 16:06) [34]
    > подтверждение друг для друга

    теперь ВАЖНЫЙ момент: в простое... а не во время передачи данных!
  • sniknik © (16.10.13 16:37) [35]
    не буду спорить, проще согласиться... да, "брат" лучше знает, а ТУПЫЕ разработчики низкоуровневых протоколов писавшие TCP именно так и делают, и в процессе передачи данных совсем не обращают внимания на то что данные не передаются... и ждут 18мин.
    плевать на на мои проверки у информикса/mssql, определивших разрыв в долю секунды, у них наверно случайно получилось 100500 раз подряд. случайно.
  • Ega23 © (16.10.13 16:37) [36]
    Розыч ругался нехорошими словами, но таки дал вот такую ссылку:
    http://www.rsdn.ru/article/net/keep_alive.xml
  • sniknik © (16.10.13 17:21) [37]
    > вот такую ссылку:
    по ней все с точностью до наоборот, в простое посылка проверочных пакетов не обязательна (даже по умолчанию отсутствует), но вот как только начнут передавать данные никакого таймаута не нужно чтобы определить разрыв... что собственно и происходит. по моим наблюдениям.

    p.s. в ADO тоже есть свойство "keep alive" но оно значит несколько иное - будет ли закрываться коннект при закрытии последнего открытого датасета, с последующим открытием первого открытого, или нет. а не собственно проверку коннекта.
  • brother © (16.10.13 17:43) [38]
    > и в процессе передачи данных совсем не обращают внимания
    > на то что данные не передаются... и ждут 18мин.

    где я об этом говорил???
  • brother © (16.10.13 17:48) [39]
    [35] ты бредишь или как?
    Я тебе говорю одно, ты уперся на другом, не вникая в мои слова...
 
Конференция "Базы" » Зависает программа после обрыва сетевого соединения с БД [D7, MySQL]
Есть новые Нет новых   [118721   +86][b:0.001][p:0.001]