Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.08.05;
Скачать: CL | DM;

Вниз

Сценарий взаимодействия клиента и сервера   Найти похожие ветки 

 
Shadow__ ©   (2007-05-24 08:29) [0]

Доброго времени суток всем  

Возникла проблема при реализации следующей модели:
1. Есть программа-сервер, каждые 3 секунды она вырабатывает новые данные определенного фиксированного размера.
2. Есть программа-клиент, которая каждые 3 секунды должна эти данные считывать.
3. Пока сервер не запшет, клиент не имеет права что-либо читать и наоборот. Пока клиент все не считает, сервер не должен записывать новую порцию данных.
4. Все это выполняется в цикле, определенное число итераций.
5. Если кто-то не успевает уложиться в 3 секунды, следующая итерация начинается только по окончании всех операций.

У сервера есть одна кнопка "Начать процесс", у клиента кнопок нет и по возможности, быть не должно.

Проблемма:
Как организовать взаимодейсвие программ?
Для наглядности прилагаю схему работы:

Сервер                                      Клиент
.|.........................................ожидание сообщ "начать работу"
сообщение "начать работу" ------------->>...|
.|.........................................ожидание сообщ "можно читать"
шарит в памяти данные.......................|
.|..........................................|
сообщ "можно читать" ------------------>>...|
.|..........................................|
ожидание сообщ "прочитал"..................Читает данные из шары
.|..........................................|
.|.<<-----------------------------------.."прочитал""
.|..........................................|
.|.........................................ожидание сообщ "можно читать"
Обновим зашаренные данные...................|
.|..........................................|
сообщ "можно читать" ------------------>>...|
.|..........................................|
ожидание сообщ "прочитал"..................Читает данные из шары
.|..........................................|
.|.<<-----------------------------------.."прочитал""
.|..........................................|
сообщ "закончить работу" -------------->>...|
.|.........................................ожидание сообщ "начать работу"

Заранее спасибо.


 
Johnmen ©   (2007-05-24 09:38) [1]

Программа-клиент каждые 3 секунды спрашивает у сервера: Есть для меня данные?
Сервер отвечает:
- нет: т.е. сервер занят, он вырабатывает; клиент спросит ещё раз через 3 сек.
- да: клиент читает, сервер не вырабатывает; закончил читать - начался отсчет 3 сек. на клиенте, и вырабатывания на сервере.

Всё. Никаких ненужных сообщений.


 
Сергей М. ©   (2007-05-24 10:10) [2]


> Shadow__ ©   (24.05.07 08:29)


Сервер, "командующий" клиентом - мягко говоря, "неправильный" сервер.

Классическая схема :

1. Клиент делает запрос "дай такие-то данные".
2. Сервер, в зависимости от готовности данных, либо тут же передает эти данные либо молчит до момента готовности. Передав данные, сервер разрывает соединение, если данных более нет и не предвидится в тек.сессии.
3. Клиент принимает данные, обрабатывает их и переходит к п.1


 
Johnmen ©   (2007-05-24 10:33) [3]


> Сергей М. ©   (24.05.07 10:10) [2]
> Передав данные, сервер разрывает соединение, если данных более нет и не предвидится в тек.сессии.

В данной ситуации это лыжи по асфальту :)


 
Anatoly Podgoretsky ©   (2007-05-24 13:53) [4]


> Сервер, "командующий" клиентом - мягко говоря, "неправильный"
> сервер.

Слишком мягко говоришь - это клиент грубо говоря


 
Сергей М. ©   (2007-05-24 13:57) [5]


> Johnmen ©   (24.05.07 10:33) [3]


> В данной ситуации


В данной ситуации мне более всего непонятно, чем провинится клиент, если будет опрашивать сервер чаще чем раз в 3 сек)


 
Сергей М. ©   (2007-05-24 13:59) [6]

И еще более непонятно, должен ли клиент мылить веревку, если не по своей вине он не смог за 3 сек принять блок данных, переданный сервером.


 
Shadow__ ©   (2007-05-25 04:25) [7]

Спасибо за комменты, у меня пока неразбериха по поводу взаимодействия. так что прошу сильно не пинать :)

""1. Клиент делает запрос "дай такие-то данные".
2. Сервер, в зависимости от готовности данных, либо тут же передает эти данные либо молчит до момента готовности. Передав данные, сервер разрывает соединение, если данных более нет и не предвидится в тек.сессии.
3. Клиент принимает данные, обрабатывает их и переходит к п.1""

Сессия одна, но порций данных несколько.
Как дать клиенту понять, что данных больше не предвилится в текушей сессии.


 
DiamondShark ©   (2007-05-25 13:18) [8]


> Как дать клиенту понять, что данных больше не предвилится
> в текушей сессии.

1. сопроводить данные специальным флагом "пива нет и сегодня не будет".
2. разорвать соединение.

одно из двух или и то и другое, что больше нравится



Страницы: 1 вся ветка

Текущий архив: 2007.08.05;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.029 c
1-1180065051
pirate
2007-05-25 07:50
2007.08.05
UNICODE


2-1183966637
Ulugbek
2007-07-09 11:37
2007.08.05
Помогите с FastReport + фискальный принтер


3-1177429285
Antaan
2007-04-24 19:41
2007.08.05
Кто знается на SQL подскажите


2-1184138826
Михаил Д.
2007-07-11 11:27
2007.08.05
Небольшая проблемка с InterBase


2-1183974986
alles
2007-07-09 13:56
2007.08.05
BDE: Программно создавать новый алиас