Я использую TcpListener
(Clase) пример https://msdn.microsoft.com/es-es/library/system.net.sockets.tcplistener(v=vs.110).aspx для обработки запросов TCP.Как распространять запросы от прослушивателя TCP
Но похоже, что в то же время это TCP Listener
собирается принять несколько запросов, которые должны быть обработаны позже в пару Web Services
вместе, и результат должен быть возвращен TCP client
.
Я имею в виду, чтобы сделать следующее:
Получить объект потока для чтения и записи
NetworkStream stream = client.GetStream();
и сохранить его в специальном классе контейнера.Положить этот класс в специальный
Queue
вспомогательный класс как этот C#: Triggering an Event when an object is added to a Queue.Когда
Queue
изменено событие, связанное с огнем, для асинхронного обработки следующего элемента очереди с использованиемTask
.В пределах
Task
общаются сWeb Services
и отправляют ответ наTCP Client
.
Пожалуйста, дайте мне знать, эта архитектура имеет жизненно важное значение и в состоянии решить многочисленные запросы TCP Listener
.
И зачем их ставить в очередь? Затем все последующие запросы будут ждать завершения всех предыдущих. – Evk
@Evk Ну ... я не уверен в очереди, и я думаю, что мне нужно, чтобы BUFFER поддерживал 'NetworkStream stream = client.GetStream();' быстро ... Как вы думаете, достаточно создать 'Task' и сохранить там всю логику? –
Ну, это зависит от нагрузки, которую я думаю. В некоторых случаях я думаю, что очередь - хорошее решение, особенно в тех случаях, когда то, что вы делаете с каждым элементом, связано с ЦП (некоторые тяжелые вычисления). Но здесь вещи привязаны к IO (вы делаете веб-запросы), поэтому вы должны иметь возможность обрабатывать многие из них без очереди. Так что если нагрузка на эту услугу будет не очень высокой - я думаю, да, обработка файлов параллельно (с обычными задачами) должна быть прекрасной. – Evk