Использую TUDPBlockSocket для общения клиента и сервера.
Клиентов более 100.
В будущем планируется организовать суб-сервера группирующие и обслуживающие подгруппы клиентов, а так же сбрасывающие итоги на мастер-сервер.
На клиенте все просто:
- отправили запрос;
- получили квитанцию о доставке запроса;
- перешли в режим ожидания ответа;
- получили ответ.
На сервере:
Планирую
- в отдельном потоке читать из сокета (тут же отправив квитанцию о получении запроса), и через критическую секцию (КС_БВЗ) сохранять в буфер входящих запросов;
- в другом отдельном потоке через КС_БВЗ читаем запросы, и для каждого отдельного запроса порождаем поток обработчик;
- поток обработчик результат сохраняет через критическую секцию (КС_БГО) в буфер готовых ответов;
- в третьем отдельном потоке через КС_БГО читаются ответы и через сокет отправляются клиенту.
Что мне хотелось бы узнать:
Как правильно организовать доступ к единственному сокету из двух потоков, которые: один читает из него, другой отправляет ответы через него?
Как мне это видится:
Через критическую секцию организовать доступ к сокету. Но если я в один момент отправляю ответ, и на сокет пришел запрос - никакого казуса не выйдет?
P.S. Если можно, то объясните подробно: что конкретно блокируется и в какой момент при работе с сокетом? То, что основной процесс переходит в ожидание - это понятно, но в моем случае как это выглядит?
Спасибо!