Понятно ли такое описание архитектуры?
От: Sshur Россия http://shurygin-sergey.livejournal.com
Дата: 12.08.10 08:19
Оценка:
Привет, All!

Стояла задача создать сервер по приему данных с портативных устройств (GPS трекеров). Каждое устройство устанавливает соединение с сервером и держит его, а сервер должен периодически их опрашивать.

Вот чисто для себя родилось такое описание взаимодействия потоков, чтобы запоминалось лучше — немного пошалил с именами потоков Такое описание понятно? Имеет право на жизнь?

Главный поток Мастер Надзиратель создает потоки Слушателя Гнезда и Змея Хранителя, затем засыпает, чтобы просыпаться по крику Гнома Оповестителя (таймер на период опроса клиентов).

Поток Слушателя Гнезда- открывает Сокет через Listen (КоличествоКлиентов), и, в цикле крутится с BeginAccept.

Потоки Соединялки, возвращаемые по AcceptCallback — получают рабочий сокет и стартуют потоки Сокетных Трансиверов, возвращая экземпляр Трансивера Мастеру Надзирателю, который кладет его себе на стол (List<Трансивер>)

Сокетный Трансивер получает экземпляр рабочего сокета от Соединялки, получает от клиента через сокет его идентификационный номер и начинает пребывать в ожидании команд Мастера Надзирателя(Через manual reset event)

Мастер надзиратель, проснувшить по крику Гнома Оповестителя, перебирает Трансиверы у себя на столе, и они запрашивают у клиента его координаты

После получения координат от клиентов Трансивер уведомляет Мастера-Надзирателя о координатах (через события, то есть из своего потока)
Мастер Надзиратель, получив координаты от Трансивера, кладет их в хвост Змея-Хранителя

Змей Хранитель, когда просыпается, проверяет наличие у себя в хвосте (List<>) несохраненных данных и сохраняет их. После сохранения всех данных засыпает на некоторое время

В случае ошибки передачи данных поток Сокетного трансивера завершается и он сигнализирует Надзирателю о своей смерти
Мастер Надзиратель, получив оповещение о смерти Трансивера, убирает его со стола

Когда Мастер надзиратель получает от Слушателя Гнезда нового Трансивера, он проверяет наличие трансивера с тем же номером на столе. Если такой находится, он его выкидывает и заменяет новым.


Спасибо тем кто осилил)

ЗЫ. Не бейте сильно)
Шурыгин Сергей

"Не следует преумножать сущности сверх необходимости" (с) Оккам
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.