Согласно этому сообщению:
Как написать масштабируемый сервер на базе Tcp / Ip
jerrylvl состояний:
- - - - - - - - - - *
Обработка
Когдавы получаете обратный вызов от начального вызова, который вы сделали, очень важно понимать, что код обратного вызова будет выполняться в низкоуровневом потоке IOCP.Абсолютно необходимо избегать длительных операций в этом обратном вызове.Использование этих потоков для сложной обработки убьет вашу масштабируемость так же эффективно, как и использование «потока на соединение».
Предлагаемое решение состоит в том, чтобы использовать обратный вызов только для постановки в очередь рабочего элемента для обработки входящих данных,это будет выполнено в каком-то другом потоке.Избегайте любых потенциально блокирующих операций внутри обратного вызова, чтобы поток IOCP мог вернуться в свой пул как можно быстрее.В .NET 4.0 я бы предложил самое простое решение - создать Task, указав в нем ссылку на сокет клиента и копию первого байта, который уже был прочитан вызовом BeginReceive.Затем эта задача отвечает за чтение всех данных из сокета, представляющих обрабатываемый вами запрос, его выполнение, а затем выполнение нового вызова BeginReceive, чтобы снова поставить в очередь сокет для IOCP.До версии .NET 4.0 вы могли использовать ThreadPool или создавать собственную реализацию многопоточной очереди работы.
- - - - - - - - - - *
Мой вопрос, как именно я буду делать это в .Net 4.0?Может ли кто-нибудь предоставить мне пример кода, который будет хорошо работать в масштабируемой среде?
Спасибо!