2013-02-17 2 views
2

Я прочел следующую статью для создания простого http-сервиса: Create a Simple Threaded HTTP Server with C# Прежде чем внедрять что-то, я в некоторой степени дилеммой.Http server - прослушивание ответов

У меня есть служба, отправляющая HTTP-запросы нескольким адресатам (с максимальным количеством максимальных адресов одновременно) и получение ответа от каждого адресата. Ответ короткий, только статус (200, если ok или какой-либо другой код), если запрос обработан правильно или нет.

В приведенной выше статье создается слушатель в цикле while, который заблокирован и прослушивает запросы.

23   private static void Listen() 
24   { 
25    listener.Start(); 
26    WriteLog("Listening On: " + port.ToString()); 
27 
28    while (true) 
29    { 
30     WriteLog("Waiting for connection..."); 
31     TcpClient client = listener.AcceptTcpClient(); 
32     Thread listenThread 
         = new Thread(new ParameterizedThreadStart(ListenThread)); 
33     listenThread.Start(client); 
34    } 
35   } 

Мне нужно отправить запросы на устройства и прислушаться к ответам от каждого. Возможно ли, что если я получу один ответ и до тех пор, пока цикл не вернется к команде listen (31), другой ответ проскользнет?

Если у меня есть ограниченное количество обрабатываемых HTTP-запросов, я должен создать слушателя для каждого или одного слушателя лучше?

+1

«Слушайте ответ»? Обычно вы отправляете запрос и получаете ответ. Это не описание HttpListener, а просто простой старый HTTP-запрос. Почему оба конца нужно слушать? Вы говорите, что попали на удаленное устройство, а затем отправили свой собственный (отдельный) запрос обратно? Не лучше ли было бы ответить на инициирующий запрос? Мне кажется, что, по крайней мере, есть некоторая путаница в том, что вы на самом деле пытаетесь сделать. – spender

+0

@spender я вижу. Возможно, я не думал об этом полностью. Моя цель - отправить информацию в длинный список пунктов назначения. Каждая передача информации может содержать небольшой запрос запроса или передачу файла в пункт назначения. Я хочу отправить одновременно не более X количество передач одновременно и ждать ответа. Значит, простой мой простой запрос может быть достаточным в моем случае? благодаря – Guy

ответ

1

Вы прокомментировали theT ASP.net Webapi? Это должно dp именно то, что вам нужно :-) Там вы также можете иметь асинхронные контроллеры, и есть много примеров.

1

Соединения TCP, ожидающие accept, помещаются в backlog (соединение по умолчанию 100 IIRC, вы можете изменить это в своем конструкторе слушателя). Это означает, что может быть выполнено 100 одновременных запросов TCP-соединения, ожидающих принятия.

Таким образом, если у вас не так много ожидающих обработки соединений, вы не потеряете их.

Смежные вопросы