Программирование

Проблема взаимодействия Клиент - Сервер

Rashid 09-08-2012 11:35

Задача: есть Сервер и Клиент. Есть канал связи (протокол) с негарантированной доставкой пакета. Но целосность пакета соблюдается. Т.е. если доставил - то без ошибок.
Подключение может инициализировать только Клиент.
Процесс такой: сотрудник (на стороне Клиент) открывает форму заявки, заполняет ее для определенных товаров. После этого нажимает Записать - в это момент Клиент создает обращение к Серверу. Если остаток в центр. базе больше нуля для опред. товара - то обратно отправляется ответ что товар есть в нужном количестве. В этот момент Сервер создает аналогичную заявку в своей базе и ЗАПИСЫВАЕТ ее. Потом отсылает ответ Клиенту и в его базе заявка так же записывается в его локальную базу.
Проблема в том, что иногда положительный ответ может не дойти до клиента, т.е. не сервере создана заявка, а на клиенте нет.
Нужно придумать такой механизм, что пусть лучше заявки не будут созданы на обеих сторонах, чем на одной из них.

зы: Сервер никак послать запрос клиенту не может - только ОТВЕТИТЬ на присланный запрос.
Glas 09-08-2012 11:47

а задолбать сервер пока ответ не придет нельзя?
Rashid 09-08-2012 12:23

долго, т.е. неответ идет по таймауту, а он 10 минут
Glas 09-08-2012 12:27

в любом случае придется общаться серверу с клиентом. Как вариант после отправки ответа с сервера клиенту, клиент должен ответить "я создал" заявку, если не ответил, то сервер ее удаляет.
Rashid 09-08-2012 12:35

ага, так и придется делать
Leeloo 12-08-2012 02:12

добавить счетчик, который выдает номер очередного обращения клиента к серверу. вместе с пакетом данных посылать серверу очередное значение счетчика (и сохранять у себя). если от сервера пришел ответ - увеличивать значение счетчика на единицу. на сервере при записи в базу сохранять у себя как последнее активное - полученное от клиента значение счетчика. при получении сервером пакета от клиента проверять - совпадает ли значение счетчика новопришедшее с хранящимся на сервере последним,и если совпадает - не перезаписывать.
Rashid 12-08-2012 23:09

такой счетчик есть - это номер заявки, она одинаковая на клиенте и на сервере