Форум: "Основная";
Текущий архив: 2007.08.05;
Скачать: [xml.tar.bz2];
ВнизСценарий взаимодействия клиента и сервера Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.044 c