Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2006.02.05;
Скачать: [xml.tar.bz2];

Вниз

Теоретический вопрос. Алгоритм.   Найти похожие ветки 

 
Plastic Angel   (2005-10-26 21:31) [0]

Доброго времени суток,уважаемые.

Собсно вопрос пока теоретический и конкретного кода нет.
Интересует ваше мнение по поводу такой вот штуки.

Исходные данные(оно же - необходимое):
Некая система с архитектурой клиент-сервер (к примеру будем считать что это какой то навороченый чат с выделенным сервером)
В любое время работы нужно обмениваться(клиент-сервер/клиент-клиент) инфой различного рода (текст,файл, потоковое аудио/видео, какая то служебная инфа и т.д и т.п).
При этом - одновременно.
По поводу самого протокола - пакеты в виде _заголовок_+_данные_

Вопрос собсно -как? то есть сам алгоритм...
В моем понимании это примерно так:
В заголовке каждого пакета есть инфа какие именно данные идут.
Есть какой-либо пул_пакетов куда складываются различные данные на отправку и соответственно выбираются и отправляются по очереди.
Так же и на принимающей стороне - пакеты складываются в пул
и раздаются необходимым модулям на обработку.
То есть смысл в том чтоб отправляющая/принимающая подсистема(sockets) не ожидали когда определённый модуль обработает пакет а просто отдавали ему его и продолжали рабоать.

Ну и вопрос собсно насколько правильно я мыслю и может кто нить предложит полее эффективный алгоритм...?

Надеюсь что более-менее внятно объяснил вопрос...=)

Заранее спасибо за участие! =)


 
Digitman ©   (2005-10-27 09:17) [1]


> насколько правильно я мыслю


мыслишь ты правильно, осталось только оформить эту мысль законченном (не сумбурном) в виде

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

Транспортный уровень должен заниматься лишь доставкой инф.сообщений, а исполняющий уровень - обработкой поступающих от трансп.уровня принятых им сообщений с возможным формированием ответных инф.сообщений

Возможно потребуется (и желателен) еще один уровень - диспетчерский. Этот уровень займет промежуточное положение между транспортным и исполняющим и будет отвечать за их взаимодействие : арбитраж, синхронизацию, формирование очередей, пулов, слежение за ходом работы обоих уровней, протоколирование, компрессию/декомпрессию/шифрацию/дешифрацию инф.пакетов/потоков и т.д. и т.п.


 
Plastic Angel   (2005-10-27 11:16) [2]


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


Ну собственно так я и хотел сказать..)
Хочу как раз cделать всю систему в виде модулей:
Верхний уровень я считаю вообще не должен "знать" как там "внизу" происходит отправка данных - просто отправляет кусок данных дипетчеру - а тот уже взаимодействует с трнспортной подсистемой. Соответственно и транспортная подсистема не разбирая данные просто отправляет их диспетчеру или удалённой стороне.
"Помойму так!"(с) Винни Пух

Только вот чета сообразить не могу... Кто должен делить данные на пакеты - "исполняющий" или "диспетчерский" уровень?
То есть к примеру надо отправить файл и во время отправки обмениваться сообщениями...
Так вот отправитель должен делить файл на определённые куски и добавлятьв пул или диспетчер сам будет делить и заодно вставлять пакеты от другого модуля(текст)...

То есть собсно нужно сделать автомат преобразующий парралельные потоки данных в один последовательный...Но вот как это наиболее эффективно сделать..?

PS: кста...по поводу транспортного уровня... есть ли какая либо разница(по производительности) между чистым socket (то есть используя Win API), компанентами TClientSocket/TServerSocket и Indy.
Вопрос именно по производительности а не по удобству программировния...


 
Digitman ©   (2005-10-27 12:34) [3]


> Кто должен делить данные на пакеты - "исполняющий" или "диспетчерский"
> уровень?


вполне логичным может выглядеть решение, при котором диспетчер оперирует "пакетами" как готовыми (как для транспортного уровня, так и для прикладного) "объектами".

под "пакетом" здесь подразумевается целостное (корректное в своей структуре) инф.сообщение, которое может сожержать как целый файловый (или иной) образ, так и его фрагмент.

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


> есть ли какая либо разница(по производительности) между
> чистым socket (то есть используя Win API), компанентами
> TClientSocket/TServerSocket и Indy.
> .. по производительности ..


Прямое использование WinsockAPI, разумеется, даст наивысшую производительность и наинизшее удобство.

Использование TClientSocket/TServerSocket даст максимальную гибкость/производительность транспортной подсистемы, ибо эти компоненты есть ничто иное как чистой воды транспорт, безо всяких сомнительных в необходимости "наворотов" над ней ..
По сути эти компоненты инкапсулируют функциональность Winsock-подсистемы, делая обращения к ней из приложения насколько это возможно удобными ...
"Надстройка" здесь  минимальна, поэтому она вносит мизерную лепту в конечную производительность трансп.подсистемы ...
Следует отметить и факт "заточки" этих компонентов именно под Windows и , соответственно, под Winsock базовой версии (v1.1).

Indy-компоненты сочетают в себе платформонезависимый транспортный уровень и прикладные надстройки над ним (FTP, SMTP, HTTP и т.д. и т.п.) .. Поэтому если не требуется мультиплатформенность будущего приложения и требуется гибкость его трансп.уровня (основанная на особенностях и технол.возможностях конкретной ОС, а именно - Windows), выбор Indy в кач-ве "чистого" транспорта вряд ли оправдан.


 
Plastic Angel   (2005-10-27 13:32) [4]

Ок.Приятно что я мыслю в правильном направлении.Осталось дело за малым -написать =)
Огромное спасибо за такие подробные ответы.
Радует что есть хорошие люди на этом форуме =)


 
Digitman ©   (2005-10-27 13:42) [5]


> Осталось дело за малым -написать


"Эт точно !" (С) Ф.Сухов


> Огромное спасибо за такие подробные ответы.
> Радует что есть хорошие люди на этом форуме


приятно отвечать на вполне грамотно поставленные вопросы.


 
Defunct ©   (2005-10-29 05:06) [6]

Digitman ©   (27.10.05 09:17) [1]

Извини, что вставляю пять копеек. Тот что между транспортным и прикладным - называется сеансовым. ;>


 
Digitman ©   (2005-10-31 08:10) [7]


> Defunct ©   (29.10.05 05:06) [6]


речь идет не о модели OSI и не о протоколах



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

Форум: "Сети";
Текущий архив: 2006.02.05;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.011 c
15-1137072656
heady
2006-01-12 16:30
2006.02.05
игра "балда"


15-1137162313
oldman
2006-01-13 17:25
2006.02.05
Флаговая морская азбука.


6-1130508869
SergP.
2005-10-28 18:14
2006.02.05
Многократное срабатывание ServerSocket1ClientError


2-1137410005
Tigraman
2006-01-16 14:13
2006.02.05
Memo и checkbox


2-1137578934
JIurafsdf
2006-01-18 13:08
2006.02.05
Как отследить в поле число или нет?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский