Мой класс C# должен иметь возможность обрабатывать большой объем событий, полученных с помощью соединения сокетов типа tcp stream. Объем сообщений о событиях, полученных от сервера tcp сокета класса, является полностью переменным. Например, иногда он получает только одно сообщение о событии в течение десяти секунд, а в другое время он получает шестьдесят сообщений событий за секунду.Обработка очереди масштабируемых сокетов
Я использую Socket.ReceiveAsync для получения сообщений. ReceiveAsync возвращает true, если операция приема ожидает или false, если уже есть данные на проводе, и операция приема выполняется синхронно. Если операция не выполнена, Socket вызовет мой обратный вызов в потоке завершения ввода-вывода, иначе я вызову свой собственный обратный вызов в текущем потоке (IOC). Кроме того, смешанный с сообщениями о событиях, я также получаю ответы на команды, отправленные на этот tcp-сервер. Ответные сообщения обрабатываются сразу же; индивидуально, путем обстрела рабочего потока.
Тем не менее, я хотел бы поставить в очередь сообщения о событиях до тех пор, пока у меня не будет «достаточно» (N) из них ИЛИ до тех пор, пока на проводнике больше не будет ... и затем запустите рабочий поток threadpool для обработки пакета сообщений о событиях , Кроме того, я хочу, чтобы все события обрабатывались последовательно, поэтому я хочу, чтобы один рабочий поток работал над этим за раз.
Процессор сообщений событий должен только копировать буфер сообщений в объект, поднять событие, а затем освободить буфер сообщений обратно в пул кольцевых буферов. Поэтому мой вопрос ... как вы думаете, лучшая стратегия для этого?
Вам нужна дополнительная информация? Дай мне знать. Благодаря!!