LINUX.ORG.RU

Общение между клиентом и сервером


0

1

Клиент подключается к серверу, после чего периодически должен посылать сообщение «ping», на что сервер должен отвечать «pong». Если кто-то нарушает договоренность, соединение закрывается.
Соединение нужно для того, чтобы сервер мог посылать некоторые данные M клиентам в произвольный момент времени.
Проблема в следующем. Есть вероятность, что M будет отправлено в тот момент, когда клиент посылает «ping», в результате чего клиент может сначала получить M и оборвать соединение, так и не получив «pong».

Мое решение. После отправки «ping» ожидать «pong» некоторое время, обрабатывая все сообщения. Если за это время «pong» не был получен, то связь прерывается. Но почему-то мне это не очень нравится.

Как обычно решается такая ситуация?

★★

Ответ на: комментарий от madcore

> Почему просто не приравнять M к pong, а лишние pong игнорировать?
Пока не вижу причин, почему бы так не сделать. Мне нравится.

rival ★★
() автор топика
Ответ на: комментарий от madcore

Почему просто не приравнять M к pong, а лишние pong игнорировать?

какой-то совсем уж грязный хак :)

Corey
()

Не знаю уж, как обычно, я делал так: кусок программы, который заведует обменом, периодически шлёт ping. Счётчик времени сбрасывается при любой посылке, дабы не мусорить pingами. Другой счётчик времени следит за приходом информации и опять же сбрасывается по приходу любой информации. Приходящие pingи игнорируются. pong отсутствует вообще. Получается более симметрично.

Смоляное Чучелко

anonymous
()

закрытие тсп соединения так и осуществляется. по стандарту там таймаут 2 мин перед закрытием сокета, на получение пакета о подтверждиении закрытия с той стороны. Хотя по идее этот пакет нафиг никому не вперся.

FollowTheRabbit
()
Ответ на: комментарий от anonymous

> Счётчик времени сбрасывается при любой посылке, дабы не мусорить pingами. Другой счётчик времени следит за приходом информации и опять же сбрасывается по приходу любой информации. Приходящие pingи игнорируются. pong отсутствует вообще.

Хорошие мысли, приму к сведению.

rival ★★
() автор топика
Ответ на: комментарий от rival

UNIX Network Programming - для понимания того как писать сетевые приложения для никсов.

Advanced Programming in the UNIX Environment - для лучшего понимания того, как писать под никсы правильно.

Tcp/IP illustrated - не читал :(

Dark_SavanT ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.