Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Отличить дисконнект от таймаута чтения  [new]
Cobalt747
Member

Откуда:
Сообщений: 2097
Есть TCP-сервер
Клиент подключается и ждет команд от него.

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

Что посоветуете?
8 июл 19, 22:50    [21923109]     Ответить | Цитировать Сообщить модератору
 Re: Отличить дисконнект от таймаута чтения  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 47660

Cobalt747
Что посоветуете?

Добавить в прикладной протокол PING-пакет, посылаемый при отсутствии другой активности в
течении ХХ секунд.

Posted via ActualForum NNTP Server 1.5

9 июл 19, 00:28    [21923141]     Ответить | Цитировать Сообщить модератору
 Re: Отличить дисконнект от таймаута чтения  [new]
Gator
Member

Откуда: Москва
Сообщений: 14347
А может и таймаутом поиграть. Пинг-то он всеяден пр портам...

А дисконнект это что? Пьяный тракторист кабло распахал? Лавина/наводнение/миру кирдых?
При отдыхе, сервак по идее должен команду разослать типа BYE, "ушла на базу", "спать ложусь до NN:mm" ...
А кто прочухал, тот сам себе злобный клиентурко
9 июл 19, 01:41    [21923151]     Ответить | Цитировать Сообщить модератору
 Re: Отличить дисконнект от таймаута чтения  [new]
istrebitel
Member

Откуда:
Сообщений: 9
https://www.rsdn.org/article/net/keep_alive.xml
9 июл 19, 06:58    [21923168]     Ответить | Цитировать Сообщить модератору
 Re: Отличить дисконнект от таймаута чтения  [new]
Дегтярев Евгений
Member

Откуда: Барнаул
Сообщений: 1605
Gator
А может и таймаутом поиграть. Пинг-то он всеяден пр портам...

herfkbwj
9 июл 19, 07:41    [21923179]     Ответить | Цитировать Сообщить модератору
 Re: Отличить дисконнект от таймаута чтения  [new]
black-manatee
Member

Откуда:
Сообщений: 50
Cobalt747
Есть TCP-сервер
Клиент подключается и ждет команд от него.


Что-то тут не так. Обычно клиент посылает команды серверу.

Речь идет про Indy ? Клиент устанавливает соединение с сервером и висит, ждет команды ?

Лучше, если клиент будет раз в X секунд открывать соединение с сервером, спрашивать: "Есть чо ?" и закрывать сразу соединение.
9 июл 19, 07:49    [21923182]     Ответить | Цитировать Сообщить модератору
 Re: Отличить дисконнект от таймаута чтения  [new]
Дегтярев Евгений
Member

Откуда: Барнаул
Сообщений: 1605
Cobalt747,

Dimitry Sibiryakov дело говорит

гарантированный способ определить жив коннект или нет - записать что-то в сокет
если клиент не проявляет активности, ее нужно эмулировать - вводить в протокол сообщения ping и pong
клиент с интервалом, который на 10-20% меньше таймаута чтения, шлет пинг (если здесь ошибка коннект точно сдох), сервер должен ответить pong, если все ок, то клиент примет это сообщение и не будет таймаута по чтению, если же таймаут превышен - либо проблемы с коннектом либо с сервером
9 июл 19, 07:56    [21923183]     Ответить | Цитировать Сообщить модератору
 Re: Отличить дисконнект от таймаута чтения  [new]
Дегтярев Евгений
Member

Откуда: Барнаул
Сообщений: 1605
black-manatee
Лучше, если клиент будет раз в X секунд открывать соединение с сервером, спрашивать: "Есть чо ?" и закрывать сразу соединение.

менее эффективно, особенно, если tls, особенно если большой rtt, но применимо если команды "тяжелые" и времени на обработку надо в разы больше чем на установку соединения.
9 июл 19, 08:10    [21923186]     Ответить | Цитировать Сообщить модератору
 Re: Отличить дисконнект от таймаута чтения  [new]
kealon(Ruslan)
Member

Откуда: Нижневартовск
Сообщений: 4805
Cobalt747
Есть TCP-сервер
Клиент подключается и ждет команд от него.

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

Что посоветуете?
+1, стандартное решение
9 июл 19, 09:25    [21923212]     Ответить | Цитировать Сообщить модератору
 Re: Отличить дисконнект от таймаута чтения  [new]
Cobalt747
Member

Откуда:
Сообщений: 2097
Dimitry Sibiryakov
Cobalt747
Что посоветуете?

Добавить в прикладной протокол PING-пакет, посылаемый при отсутствии другой активности в
течении ХХ секунд.

Это было бы хорошо, конечно.
Но надо как-то выкрутиться в текущем положении.
9 июл 19, 11:10    [21923277]     Ответить | Цитировать Сообщить модератору
 Re: Отличить дисконнект от таймаута чтения  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 47660

Cobalt747
надо как-то выкрутиться в текущем положении.

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

Posted via ActualForum NNTP Server 1.5

9 июл 19, 11:33    [21923292]     Ответить | Цитировать Сообщить модератору
 Re: Отличить дисконнект от таймаута чтения  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 57398
Блог
Cobalt747
Есть TCP-сервер
Клиент подключается и ждет команд от него.

....

Что посоветуете?

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

Ну а в этой извратной схеме проще всего решить проблему, поставив таймер неактивности и при его срабатывании переустанавливая соединение.
9 июл 19, 11:48    [21923308]     Ответить | Цитировать Сообщить модератору
 Re: Отличить дисконнект от таймаута чтения  [new]
ёёёёё
Member

Откуда:
Сообщений: 404
Очень часто "сервер" - не тот, кто ждет команды, а всего лишь тот, чей адрес в сети известен, а клиент - соответственно тот, кто инициирует подключение.
Можно, конечно, выдумывать еще разную терминологию, но вот так принято.
9 июл 19, 11:57    [21923317]     Ответить | Цитировать Сообщить модератору
 Re: Отличить дисконнект от таймаута чтения  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 57398
Блог
ёёёёё
Можно, конечно, выдумывать еще разную терминологию, но вот так принято.

Вот и не надо выдумывать новую терминологию. Сервер - это пассивная сторона, которая принимает соединение, ждёт команду, выполняет её и посылает ответ. Клиент - это активная сторона, которая устанавливает соединение, посылает команду и ждёт ответ.

Для "чей адрес в сети известен" делают, например, сервер авторизации, умеющий выполнять две команды:

  • "Я Вася, поднял сервер на адресе таком-то, все команды для него посылать туда"
  • "Хочу связаться с Васей, скажи куда стучаться"
  • 9 июл 19, 12:01    [21923320]     Ответить | Цитировать Сообщить модератору
     Re: Отличить дисконнект от таймаута чтения  [new]
    ёёёёё
    Member

    Откуда:
    Сообщений: 404
    softwarer,

    реальный мир - не всегда плоский.
    9 июл 19, 12:10    [21923328]     Ответить | Цитировать Сообщить модератору
     Re: Отличить дисконнект от таймаута чтения  [new]
    softwarer
    Member

    Откуда: 127.0.0.1
    Сообщений: 57398
    Блог
    ёёёёё
    softwarer,

    реальный мир - не всегда плоский.

    Да, конечно. Я ничуть не возражаю против права всех желающих кушать задницей и срать через рот.
    9 июл 19, 12:19    [21923332]     Ответить | Цитировать Сообщить модератору
     Re: Отличить дисконнект от таймаута чтения  [new]
    Dimitry Sibiryakov
    Member

    Откуда:
    Сообщений: 47660

    softwarer
    Сервер - это пассивная сторона, которая принимает соединение, ждёт команду, выполняет её и
    посылает ответ. Клиент - это активная сторона, которая устанавливает соединение, посылает
    команду и ждёт ответ.

    Instant Messenger-ы с тобой не согласны.

    Posted via ActualForum NNTP Server 1.5

    9 июл 19, 12:42    [21923348]     Ответить | Цитировать Сообщить модератору
     Re: Отличить дисконнект от таймаута чтения  [new]
    softwarer
    Member

    Откуда: 127.0.0.1
    Сообщений: 57398
    Блог
    Dimitry Sibiryakov
    Instant Messenger-ы с тобой не согласны.

    Really? Кстати, о каком конкретно ты говоришь? У разных довольно разные схемы работы.
    9 июл 19, 12:47    [21923351]     Ответить | Цитировать Сообщить модератору
     Re: Отличить дисконнект от таймаута чтения  [new]
    DmSer
    Member

    Откуда: Пенза
    Сообщений: 850
    ёёёёё
    Очень часто "сервер" - не тот, кто ждет команды, а всего лишь тот, чей адрес в сети известен, а клиент - соответственно тот, кто инициирует подключение.


    +1

    softwarer
    Для "чей адрес в сети известен" делают, например, сервер авторизации, умеющий выполнять две команды:

    "Я Вася, поднял сервер на адресе таком-то, все команды для него посылать туда"
    "Хочу связаться с Васей, скажи куда стучаться"


    Речь видимо про VPN?
    9 июл 19, 12:50    [21923355]     Ответить | Цитировать Сообщить модератору
     Re: Отличить дисконнект от таймаута чтения  [new]
    softwarer
    Member

    Откуда: 127.0.0.1
    Сообщений: 57398
    Блог
    DmSer
    Речь видимо про VPN?

    Про очень много что, начиная от icq и кончая oracle tns listener.
    9 июл 19, 13:01    [21923367]     Ответить | Цитировать Сообщить модератору
     Re: Отличить дисконнект от таймаута чтения  [new]
    Dimitry Sibiryakov
    Member

    Откуда:
    Сообщений: 47660

    softwarer
    Кстати, о каком конкретно ты говоришь?

    Jabber, ICQ.

    И, если уж на то пошло, Oracle Publisher-Subscriber Notification.

    Posted via ActualForum NNTP Server 1.5

    9 июл 19, 13:18    [21923393]     Ответить | Цитировать Сообщить модератору
     Re: Отличить дисконнект от таймаута чтения  [new]
    Alibek B.
    Member

    Откуда:
    Сообщений: 3117
    softwarer
    Вот и не надо выдумывать новую терминологию. Сервер - это пассивная сторона, которая принимает соединение, ждёт команду, выполняет её и посылает ответ. Клиент - это активная сторона, которая устанавливает соединение, посылает команду и ждёт ответ.

    Сервер — тот, кто обслуживает запросы клиентов. Все.
    Что он там что-то ждет, выполняет, пассивный, активный — это и есть выдумки.
    9 июл 19, 15:47    [21923538]     Ответить | Цитировать Сообщить модератору
     Re: Отличить дисконнект от таймаута чтения  [new]
    softwarer
    Member

    Откуда: 127.0.0.1
    Сообщений: 57398
    Блог
    Alibek B.
    Сервер — тот, кто обслуживает запросы клиентов. Все.

    Верно. А теперь, прежде чем говорить глупости, загляни в первое сообщение топика, подставь туда это определение и ощути разницу.
    9 июл 19, 15:50    [21923544]     Ответить | Цитировать Сообщить модератору
     Re: Отличить дисконнект от таймаута чтения  [new]
    softwarer
    Member

    Откуда: 127.0.0.1
    Сообщений: 57398
    Блог
    Dimitry Sibiryakov
    Jabber, ICQ.

    Как реализован Jabber я не в курсе. ICQ изначально был классическим клиент-сервером (то есть клиент стучался на icq.com и получал сообщения для себя), по мере роста нагрузки его доработали для поддержки прямых соединений по схеме, которую я привёл выше, где icq.com выполнял роль сервера авторизации.

    Dimitry Sibiryakov
    И, если уж на то пошло, Oracle Publisher-Subscriber Notification.

    Я не в курсе, что такое "Oracle Publsher-Subcriber Notification". Гугль при запросе по этой строчке говорит "Нет результатов". Вероятно, это продукт из твоего фантазийного мира, поэтому не удивлюсь, если он работает с помощью розовых пони.
    9 июл 19, 15:56    [21923553]     Ответить | Цитировать Сообщить модератору
     Re: Отличить дисконнект от таймаута чтения  [new]
    Alibek B.
    Member

    Откуда:
    Сообщений: 3117
    softwarer
    загляни в первое сообщение топика, подставь туда это определение и ощути разницу.

    Это что-то должно значить? Или в чем смысл этого заглядывания и какую разницу нужно ощутить?
    Не нужно ничего домысливать к базовому определению, тогда и не будет непониманий.
    Не нужно выдумывать про ожидание подключений и отправку ответов, это вообще выходит за рамки определения.
    На транспортном уровне сервер — это listen-сокет, который принимает соединения. На прикладном уровне сервер — это компонент, обслуживающий запросы. При этом на транспортном и прикладном уровне сервера могут не совпадать. Более того, на прикладном уровне хост может быть сервером и клиентом одновременно.
    9 июл 19, 16:01    [21923558]     Ответить | Цитировать Сообщить модератору
    Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
    Все форумы / Delphi Ответить