Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Отличить дисконнект от таймаута чтения / 25 сообщений из 31, страница 1 из 2
08.07.2019, 22:50
    #39835236
Cobalt747
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отличить дисконнект от таймаута чтения
Есть TCP-сервер
Клиент подключается и ждет команд от него.

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

Что посоветуете?
...
Рейтинг: 0 / 0
09.07.2019, 00:28
    #39835266
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отличить дисконнект от таймаута чтения
Cobalt747Что посоветуете?

Добавить в прикладной протокол PING-пакет, посылаемый при отсутствии другой активности в
течении ХХ секунд.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
09.07.2019, 01:41
    #39835275
Gator
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отличить дисконнект от таймаута чтения
А может и таймаутом поиграть. Пинг-то он всеяден пр портам...

А дисконнект это что? Пьяный тракторист кабло распахал? Лавина/наводнение/миру кирдых?
При отдыхе, сервак по идее должен команду разослать типа BYE, "ушла на базу", "спать ложусь до NN:mm" ...
А кто прочухал, тот сам себе злобный клиентурко
...
Рейтинг: 0 / 0
09.07.2019, 06:58
    #39835286
istrebitel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отличить дисконнект от таймаута чтения
...
Рейтинг: 0 / 0
09.07.2019, 07:41
    #39835293
Дегтярев Евгений
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отличить дисконнект от таймаута чтения
GatorА может и таймаутом поиграть. Пинг-то он всеяден пр портам...
herfkbwj
...
Рейтинг: 0 / 0
09.07.2019, 07:49
    #39835295
black-manatee
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отличить дисконнект от таймаута чтения
Cobalt747Есть TCP-сервер
Клиент подключается и ждет команд от него.

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

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

Лучше, если клиент будет раз в X секунд открывать соединение с сервером, спрашивать: "Есть чо ?" и закрывать сразу соединение.
...
Рейтинг: 0 / 0
09.07.2019, 07:56
    #39835296
Дегтярев Евгений
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отличить дисконнект от таймаута чтения
Cobalt747,

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

гарантированный способ определить жив коннект или нет - записать что-то в сокет
если клиент не проявляет активности, ее нужно эмулировать - вводить в протокол сообщения ping и pong
клиент с интервалом, который на 10-20% меньше таймаута чтения, шлет пинг (если здесь ошибка коннект точно сдох), сервер должен ответить pong, если все ок, то клиент примет это сообщение и не будет таймаута по чтению, если же таймаут превышен - либо проблемы с коннектом либо с сервером
...
Рейтинг: 0 / 0
09.07.2019, 08:10
    #39835298
Дегтярев Евгений
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отличить дисконнект от таймаута чтения
black-manateeЛучше, если клиент будет раз в X секунд открывать соединение с сервером, спрашивать: "Есть чо ?" и закрывать сразу соединение.
менее эффективно, особенно, если tls, особенно если большой rtt, но применимо если команды "тяжелые" и времени на обработку надо в разы больше чем на установку соединения.
...
Рейтинг: 0 / 0
09.07.2019, 09:25
    #39835316
kealon(Ruslan)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отличить дисконнект от таймаута чтения
Cobalt747Есть TCP-сервер
Клиент подключается и ждет команд от него.

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

Что посоветуете? +1, стандартное решение
...
Рейтинг: 0 / 0
09.07.2019, 11:10
    #39835358
Cobalt747
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отличить дисконнект от таймаута чтения
Dimitry SibiryakovCobalt747Что посоветуете?

Добавить в прикладной протокол PING-пакет, посылаемый при отсутствии другой активности в
течении ХХ секунд.
Это было бы хорошо, конечно.
Но надо как-то выкрутиться в текущем положении.
...
Рейтинг: 0 / 0
09.07.2019, 11:33
    #39835367
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отличить дисконнект от таймаута чтения
Cobalt747надо как-то выкрутиться в текущем положении.

Из текущего положения выхода нет, обломись. Вышеназванный keep alive не поможет, поскольку
по умолчанию watchdog пакеты начинают посылаться через два часа неактивности.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
09.07.2019, 11:48
    #39835378
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отличить дисконнект от таймаута чтения
Cobalt747Есть TCP-сервер
Клиент подключается и ждет команд от него.

....

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

Ну а в этой извратной схеме проще всего решить проблему, поставив таймер неактивности и при его срабатывании переустанавливая соединение.
...
Рейтинг: 0 / 0
09.07.2019, 11:57
    #39835385
ёёёёё
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отличить дисконнект от таймаута чтения
Очень часто "сервер" - не тот, кто ждет команды, а всего лишь тот, чей адрес в сети известен, а клиент - соответственно тот, кто инициирует подключение.
Можно, конечно, выдумывать еще разную терминологию, но вот так принято.
...
Рейтинг: 0 / 0
09.07.2019, 12:01
    #39835387
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отличить дисконнект от таймаута чтения
ёёёёёМожно, конечно, выдумывать еще разную терминологию, но вот так принято.
Вот и не надо выдумывать новую терминологию. Сервер - это пассивная сторона, которая принимает соединение, ждёт команду, выполняет её и посылает ответ. Клиент - это активная сторона, которая устанавливает соединение, посылает команду и ждёт ответ.

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

"Я Вася, поднял сервер на адресе таком-то, все команды для него посылать туда"

"Хочу связаться с Васей, скажи куда стучаться"
...
Рейтинг: 0 / 0
09.07.2019, 12:10
    #39835391
ёёёёё
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отличить дисконнект от таймаута чтения
softwarer,

реальный мир - не всегда плоский.
...
Рейтинг: 0 / 0
09.07.2019, 12:19
    #39835394
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отличить дисконнект от таймаута чтения
ёёёёёsoftwarer,

реальный мир - не всегда плоский.
Да, конечно. Я ничуть не возражаю против права всех желающих кушать задницей и срать через рот.
...
Рейтинг: 0 / 0
09.07.2019, 12:42
    #39835404
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отличить дисконнект от таймаута чтения
softwarerСервер - это пассивная сторона, которая принимает соединение, ждёт команду, выполняет её и
посылает ответ. Клиент - это активная сторона, которая устанавливает соединение, посылает
команду и ждёт ответ.

Instant Messenger-ы с тобой не согласны.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
09.07.2019, 12:47
    #39835406
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отличить дисконнект от таймаута чтения
Dimitry SibiryakovInstant Messenger-ы с тобой не согласны.
Really? Кстати, о каком конкретно ты говоришь? У разных довольно разные схемы работы.
...
Рейтинг: 0 / 0
09.07.2019, 12:50
    #39835408
DmSer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отличить дисконнект от таймаута чтения
ёёёёёОчень часто "сервер" - не тот, кто ждет команды, а всего лишь тот, чей адрес в сети известен, а клиент - соответственно тот, кто инициирует подключение.

+1

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

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

Речь видимо про VPN?
...
Рейтинг: 0 / 0
09.07.2019, 13:01
    #39835418
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отличить дисконнект от таймаута чтения
DmSerРечь видимо про VPN?
Про очень много что, начиная от icq и кончая oracle tns listener.
...
Рейтинг: 0 / 0
09.07.2019, 13:18
    #39835439
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отличить дисконнект от таймаута чтения
softwarerКстати, о каком конкретно ты говоришь?

Jabber, ICQ.

И, если уж на то пошло, Oracle Publisher-Subscriber Notification.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
09.07.2019, 15:47
    #39835529
Alibek B
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отличить дисконнект от таймаута чтения
softwarer Вот и не надо выдумывать новую терминологию . Сервер - это пассивная сторона, которая принимает соединение, ждёт команду, выполняет её и посылает ответ. Клиент - это активная сторона, которая устанавливает соединение, посылает команду и ждёт ответ.
Сервер — тот, кто обслуживает запросы клиентов. Все.
Что он там что-то ждет, выполняет, пассивный, активный — это и есть выдумки.
...
Рейтинг: 0 / 0
09.07.2019, 15:50
    #39835533
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отличить дисконнект от таймаута чтения
Alibek B.Сервер — тот, кто обслуживает запросы клиентов. Все.
Верно. А теперь, прежде чем говорить глупости, загляни в первое сообщение топика, подставь туда это определение и ощути разницу.
...
Рейтинг: 0 / 0
09.07.2019, 15:56
    #39835538
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отличить дисконнект от таймаута чтения
Dimitry SibiryakovJabber, ICQ.
Как реализован Jabber я не в курсе. ICQ изначально был классическим клиент-сервером (то есть клиент стучался на icq.com и получал сообщения для себя), по мере роста нагрузки его доработали для поддержки прямых соединений по схеме, которую я привёл выше, где icq.com выполнял роль сервера авторизации.

Dimitry SibiryakovИ, если уж на то пошло, Oracle Publisher-Subscriber Notification.
Я не в курсе, что такое "Oracle Publsher-Subcriber Notification". Гугль при запросе по этой строчке говорит "Нет результатов". Вероятно, это продукт из твоего фантазийного мира, поэтому не удивлюсь, если он работает с помощью розовых пони.
...
Рейтинг: 0 / 0
09.07.2019, 16:01
    #39835542
Alibek B
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отличить дисконнект от таймаута чтения
softwarerзагляни в первое сообщение топика, подставь туда это определение и ощути разницу.
Это что-то должно значить? Или в чем смысл этого заглядывания и какую разницу нужно ощутить?
Не нужно ничего домысливать к базовому определению, тогда и не будет непониманий.
Не нужно выдумывать про ожидание подключений и отправку ответов, это вообще выходит за рамки определения.
На транспортном уровне сервер — это listen-сокет, который принимает соединения. На прикладном уровне сервер — это компонент, обслуживающий запросы. При этом на транспортном и прикладном уровне сервера могут не совпадать. Более того, на прикладном уровне хост может быть сервером и клиентом одновременно.
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Отличить дисконнект от таймаута чтения / 25 сообщений из 31, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]