![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Eclipse Foundation
Старожил
Регистрация: 19.09.2007
Сообщений: 2,604
|
![]()
Здравствуйте. Необходимы советы в решении следующей задачи.
Разработать клиент-серверное приложение и реализовать на его основе системный шаблон синхронизации под названием Callback. Суть работы данного шаблона такова: Есть сервер и есть много клиентов. Клиенты постоянно отправляют запросы на сервер, указывая в запросе информацию для обратной связи (тоесть чтобы сервер мог отправить результат запроса обратно нужному клиенту). //----------------------------------------------------------------------- Вот с чего я начал. Есть три класса. Сервер, Клиент, Обработчик. Сервер хранит очередь запросов (реализуется с помощью stl'овского List) и обрабатывает эти запросы согласно очереди. Клиент имеет свой номер и какую-то переменную (чтобы получать результат запроса с сервера и выводит на экран результат запроса). Свой номер он отправляет серверу в качестве информации для обратной связи. Обработчик хранит две очереди: очередь запросов клиентов и очередь ответов сервера. Из первой очереди он отправляет запросы на сервер, а из второй - клиентам. //---------------------------------------------------------------------- Вопрос заключается в следующем: через какой объект синхронизации это все дело лучше всего организовать? Ну чтобы ярче было видно, что запросы отправляются и приходят ответы. Я думаю сделать для каждого объекта свой тип потока. Тоесть для сервера - серверный поток, для обработчика (или лучше его назвать распределитель) - поток обработчика, для клиентов - потоки-клиенты. //---------------------------------------------------------------------- Среда разработки Borland C++ Builder 6. |
![]() |
![]() |
![]() |
#2 |
Тупой студент
Форумчанин
Регистрация: 12.05.2007
Сообщений: 614
|
![]()
я немного не понял, что ты имеешь ввиду под словом callback. сокетовская модель ввода/вывода, которая называется Completion routines? или обычный backconnect?
насчет организации, да, потоки самое оно. но это зависит от того, какую модель i/o будешь использовать. лично мне нравится WSAAsyncSelect, простая, понятная и удобная) для меня самое оно, т.к мне нравится wtl, там сообщения ловить удобно) |
![]() |
![]() |
![]() |
#3 |
Eclipse Foundation
Старожил
Регистрация: 19.09.2007
Сообщений: 2,604
|
![]()
Нет, мне свой обработчик сообщений (распределитель) сделать нужно. Тоесть стандартными средствами, на основе потоков. Это скорее похоже на backconnect, только в качестве сообщений идут обычные числа.
|
![]() |
![]() |
![]() |
#4 |
Тупой студент
Форумчанин
Регистрация: 12.05.2007
Сообщений: 614
|
![]()
ну говоря ловить сообщения я имел ввиду fd_accept, fd_read, fd_write и тп. ты какие сокеты используешь? блокирующие? тогда тебе понадобится создавать для каждого подключенного клиента отдельный поток, что не айс, если у тебя много клиентов будет. (хотя я так делал, работает норм).
пс. а что пишешь то?) |
![]() |
![]() |
![]() |
#5 |
Eclipse Foundation
Старожил
Регистрация: 19.09.2007
Сообщений: 2,604
|
![]()
Сокетами тут и не пахнет
![]() |
![]() |
![]() |
![]() |
#6 |
Тупой студент
Форумчанин
Регистрация: 12.05.2007
Сообщений: 614
|
![]()
аа. понятно
![]() |
![]() |
![]() |
![]() |
#7 |
Eclipse Foundation
Старожил
Регистрация: 19.09.2007
Сообщений: 2,604
|
![]()
Я вот так прикинул... Лучше всего будет сделать это через семафор с двумя местами. Одно место всегда занято обработчиком, а второе попеременно то у сервера, то у клиента.
Только вот как сделать на Билдере семафор... ума не приложу. |
![]() |
![]() |
![]() |
#8 |
Тупой студент
Форумчанин
Регистрация: 12.05.2007
Сообщений: 614
|
![]()
эм. объекты синхронизации я всегда создавал апишными функциями. семафор - CreateSemaphore. так что нет привязки к среде разработки. пс. в мсдн есть пример
|
![]() |
![]() |
![]() |
#9 |
Eclipse Foundation
Старожил
Регистрация: 19.09.2007
Сообщений: 2,604
|
![]()
Отлично надо будет посмотреть, когда закончу с классами. Спасибо.
|
![]() |
![]() |
![]() |
#10 |
Eclipse Foundation
Старожил
Регистрация: 19.09.2007
Сообщений: 2,604
|
![]()
Итак, снова здравствуйте. Вопрос мой вот в чем. Я написал класс Semaphore на апишных функциях. А так как с WinAPI я не сильно в друзьях, то у меня мой семафор не работает. Подскажите пожалуйста что не так
Код:
ПЫСЫ: И кстати, как его на Билдере использовать (ну, какую функцию сначала вызывать, какую потом). Я делал на C#, но там уже есть стандартный класс Semaphore, так что с ним не было проблем. Но тут нужно обязательно на С++ и к тому же на Билдере. Заранее благодарен. |
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Клиент-серверное взаимодействие посредством использования сокетов | Cantana | Компоненты Delphi | 2 | 18.02.2008 19:27 |
Клиент-сервер-клиент | Кронос | Работа с сетью в Delphi | 3 | 24.08.2007 07:57 |
Клиет - серверное приложение | Mitron | Работа с сетью в Delphi | 6 | 20.08.2007 19:57 |
Клиент-серверное приложение | veryseldom | Работа с сетью в Delphi | 8 | 20.08.2007 19:57 |
Callback | Wolfheart | Win Api | 12 | 02.06.2007 23:13 |