![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Сценарий взаимодействия клиента и сервера [D7, WinXP]
Shadow__ © (2007-05-24 08:29:00)Доброго времени суток всем
Возникла проблема при реализации следующей модели:
1. Есть программа-сервер, каждые 3 секунды она вырабатывает новые данные определенного фиксированного размера.
2. Есть программа-клиент, которая каждые 3 секунды должна эти данные считывать.
3. Пока сервер не запшет, клиент не имеет права что-либо читать и наоборот. Пока клиент все не считает, сервер не должен записывать новую порцию данных.
4. Все это выполняется в цикле, определенное число итераций.
5. Если кто-то не успевает уложиться в 3 секунды, следующая итерация начинается только по окончании всех операций.
У сервера есть одна кнопка "Начать процесс", у клиента кнопок нет и по возможности, быть не должно.
Проблемма:
Как организовать взаимодейсвие программ?
Для наглядности прилагаю схему работы:
Сервер Клиент
.|.........................................ожидание сообщ "начать работу"
сообщение "начать работу" ------------->>...|
.|.........................................ожидание сообщ "можно читать"
шарит в памяти данные.......................|
.|..........................................|
сообщ "можно читать" ------------------>>...|
.|..........................................|
ожидание сообщ "прочитал"..................Читает данные из шары
.|..........................................|
.|.<<-----------------------------------.."прочитал""
.|..........................................|
.|.........................................ожидание сообщ "можно читать"
Обновим зашаренные данные...................|
.|..........................................|
сообщ "можно читать" ------------------>>...|
.|..........................................|
ожидание сообщ "прочитал"..................Читает данные из шары
.|..........................................|
.|.<<-----------------------------------.."прочитал""
.|..........................................|
сообщ "закончить работу" -------------->>...|
.|.........................................ожидание сообщ "начать работу"
Заранее спасибо.
DiamondShark (2007-05-25 13:18:00) [1]
> Как дать клиенту понять, что данных больше не предвилится
> в текушей сессии.
1. сопроводить данные специальным флагом "пива нет и сегодня не будет".
2. разорвать соединение.
одно из двух или и то и другое, что больше нравится
Shadow__ (2007-05-25 04:25:00) [2]Спасибо за комменты, у меня пока неразбериха по поводу взаимодействия. так что прошу сильно не пинать :)
""1. Клиент делает запрос "дай такие-то данные".
2. Сервер, в зависимости от готовности данных, либо тут же передает эти данные либо молчит до момента готовности. Передав данные, сервер разрывает соединение, если данных более нет и не предвидится в тек.сессии.
3. Клиент принимает данные, обрабатывает их и переходит к п.1""
Сессия одна, но порций данных несколько.
Как дать клиенту понять, что данных больше не предвилится в текушей сессии.
Сергей М. (2007-05-24 13:59:00) [3]И еще более непонятно, должен ли клиент мылить веревку, если не по своей вине он не смог за 3 сек принять блок данных, переданный сервером.
Сергей М. (2007-05-24 13:57:00) [4]
> Johnmen © (24.05.07 10:33) [3]
> В данной ситуации
В данной ситуации мне более всего непонятно, чем провинится клиент, если будет опрашивать сервер чаще чем раз в 3 сек)
Anatoly Podgoretsky (2007-05-24 13:53:00) [5]
> Сервер, "командующий" клиентом - мягко говоря, "неправильный"
> сервер.
Слишком мягко говоришь - это клиент грубо говоря
Johnmen (2007-05-24 10:33:00) [6]
> Сергей М. © (24.05.07 10:10) [2]
> Передав данные, сервер разрывает соединение, если данных более нет и не предвидится в тек.сессии.
В данной ситуации это лыжи по асфальту :)
Сергей М. (2007-05-24 10:10:00) [7]
> Shadow__ © (24.05.07 08:29)
Сервер, "командующий" клиентом - мягко говоря, "неправильный" сервер.
Классическая схема :
1. Клиент делает запрос "дай такие-то данные".
2. Сервер, в зависимости от готовности данных, либо тут же передает эти данные либо молчит до момента готовности. Передав данные, сервер разрывает соединение, если данных более нет и не предвидится в тек.сессии.
3. Клиент принимает данные, обрабатывает их и переходит к п.1
Johnmen (2007-05-24 09:38:00) [8]Программа-клиент каждые 3 секунды спрашивает у сервера: Есть для меня данные?
Сервер отвечает:
- нет: т.е. сервер занят, он вырабатывает; клиент спросит ещё раз через 3 сек.
- да: клиент читает, сервер не вырабатывает; закончил читать - начался отсчет 3 сек. на клиенте, и вырабатывания на сервере.
Всё. Никаких ненужных сообщений.