Задержка перед отправкой сообщения через сокет - как это поможет? - PullRequest
1 голос
/ 30 июня 2010

У меня есть интерфейс сокета tcpip для стороннего программного приложения.Я реализовал этот интерфейс для нескольких сайтов клиентов без проблем.Последний клиент, хотя ... проблемы.Мы включили вход в приложения на обоих концах, а также установили Wireshark на ПК для регистрации необработанного трафика tcpip.Таким образом, мы доказали, что мое серверное приложение успешно отправляет сообщение, компьютер получает сообщение, но клиентское приложение его не видит.(Это проблема с перебоями, поэтому ее так сложно устранять.)

Детали сокетов настолько просты, насколько они есть: один сокет, обеспечивающий двустороннюю связь между сервером и ПК.Сообщения представляют собой простой текст ascii и довольно короткие (не XML).Сервер инициирует связь, отправляя первое сообщение, а затем клиент отвечает несколькими сообщениями.Сокет всегда открыт, пока запущены приложения.Клиентское приложение разработано так, что конечный пользователь может обрабатывать только один случай за раз, что предотвращает конфликты сообщений.У них настроен какой-то опрос, их приложение «спит», пока не увидит исходное сообщение от сервера.

Сторонний поставщик посоветовал мне добавить несколько секунд задержки, прежде чем я отправлю им исходное сообщение.,Я не вижу, как это помогает.Если клиент «спит», просто опрос сокета, ожидающего сообщения, как поможет добавление задержки перед первым сообщением?Мы не посылаем два сообщения, а второе теряется.Это теряет первое сообщение.Поэтому я не понимаю, как это имеет значение, если мы отправим это сообщение сейчас или через две секунды.

Я спросил их, а они не дали мне подробностей.Это могут быть некоторые детали в их коде, которые они не хотят раскрывать мне, и это справедливо.Поэтому я спрашиваю здесь, потому что я всегда узнаю что-то новое о программировании сокетов.Может быть, вы, ребята, можете пролить некоторый свет на то, как опрос сообщений может повлиять на опрос сокета tcpip?

1 Ответ

2 голосов
/ 30 июня 2010

Так как это чей-то клиент, и они не скажут вам, что он делает (кроме как сказать «вставьте задержку»), ответ, вероятно, заключается в том, что его клиент читает и отбрасывает сообщение, потому что оно еще не в состоянии иметь дело с этим. Задержка позволит клиенту вовремя перейти в состояние, в котором он сможет правильно ответить на сообщение.

Другими словами, у клиента есть состояние гонки. Это может быть легко, если у них есть один поток для чтения сообщений, а другой - для их обработки.

Если не использовать strace (1) на клиенте, чтобы посмотреть, какие системные вызовы он выполняет, сложно сказать, что на самом деле делает клиент.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...