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