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

Вниз

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

 
Romul   (2002-01-22 14:47) [0]

Люди, я вообще-то программированием под СУБД занимаюсь, но тут надо было и я SNPP-серверочек небольшой сделал. Суть такая, что SNPP протокол, это что-то типа SMTP (т.е. команда-ответ сервера-команда и т.д.). Я сделал все это через ClientSocket (SNPP-сервер стоит в другой конторе и меня не особо волнует). Все действия я выполняю после события onClientSocketRead (и все это асинхронно делается, т.е. nonBlocking). Я вот думаю (все нормально работает) правильно ли я асинхронно все это сделал? Может синхронно лучше? Объясните в каких случаях какой режим используется (синх или асинх)? Ну ламер я (пока) в этой области.


 
Digitman   (2002-01-22 15:06) [1]

Асинхронный режим хорош простотой программного исполнения и применяется, когда клиент и сервер обмениваются короткими сообщениями в режиме "вопрос - время_ожидания_ответа - ответ", где время_ожидания_ответа стремится к нулю. в этом режиме сервер обрабатывает запросы всех своих клиентов последовательно, в осн.потоке, и , если время_ожидания_ответа допустимо мало, задержка с колучением ответов от сервера у каждого из клиентов сравнительно мало.

Синхронный режим (в случае с TServerSocket это - thread-blocking режим, т.е. мультипоточный с применением блокирующих WinsockAPI-вызовов на уровне потоков) хорош тем, что обработка сервером одновременных кл.запросов происходит параллельно, в разных ьпотоках, каждый из которых является индивидуальным транспортным потоком отдельного кл.соединения.
В первую очередь, такой режим нужен, когда время_ожидания_ответа значительно (к примеру, клиент запросил у сервера НД, формирование которого сервер выполняет запросом к СУБД и факт.время выполнения запроса относительно велико). Если бы сервер обрабатывал такие "навороченые" запросы последовательно, клиента за клиентом, в единственном кодовом потоке, то вместе с текущим клиентом прочие клиенты так же ждали бы, пока сервер обслужит его запрос и очередь обслуживания дойдет до них.
К слову сказать, все современные промышленные SQL-серверы являются мультипоточными (технология SuperServer), и обработка кл.запросов в них выполняется параллельно, в различных потоках, использующих, в т.ч. и как правило, блокирующие API-вызовы транспортного и других уровней


 
Romul   (2002-01-22 15:15) [2]

Т.е. для SMTP или POP клиентов можно использовать неблокирующее соединение? А допустим если есть клиентская часть, которая посылает, как ты говоришь, навороченнейший запрос, то она же может послать запрос а потом прохлождаться, и допустим если поставить таймер на минуту, то через минуту, если не пришел ответ то закрыть сокет. Это я рассуждаю со стороны клиента, ему есть смысл использовать блокирующее соединение?


 
Digitman   (2002-01-22 15:42) [3]

Протокол инф.обмена между сервером и клиентом здесь совершенно ни при чем. Это лишь соглашения между обменивающимися информацией сторонами о форматах транслируемых сообщений.
Тот же POP-сервер, прежде чем выдаст клиенту запрошенные им в POP-формате данные, проделывает, как правило, гигантскую работу по поиску в своих БД входящих почтовых сообщений, адресованных тек.клиенту. И все это время, с момента подачи запроса, клиент ждет. И все остальные клиенты тоже будут ждать, пока сервер обслужит клиентов, стоящих впереди в очереди запросов, если сервер - однопоточный.

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

И еще. "Блокирующий" режим и "мультипоточный" режим - вещи, в принципе, различные, но одновременно тесно связанные в настоящих ,проф-но выполненных, распределенных инф.системах.



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

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

Наверх





Память: 0.46 MB
Время: 0.005 c
1-9560
-=GaLaN=-
2002-03-24 19:19
2002.04.04
Как перетаскивать форму за какой-нибудь компонент?


4-9687
Vaddya
2002-01-29 23:19
2002.04.04
Создание GroupBox


14-9602
VuDZ
2002-02-21 09:31
2002.04.04
Вопрос сезона


7-9663
DDD
2001-12-13 16:33
2002.04.04
СОМ-порт и устройство


14-9617
skywalker
2002-02-21 17:57
2002.04.04
Кто делал игрухи?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский