2013-02-17 5 views
2

간단한 HTTP 서비스를 만들기위한 다음 문서를 읽었습니다. Create a Simple Threaded HTTP Server with C# 구현하기 전에 저는 약간의 딜레마에 빠졌습니다.HTTP 서버 - 응답 듣기

최대 대상 수를 동시에 초과하는 여러 대상으로 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

당신은 the ASP ASP.net Webapi를 간략하게 했습니까? 이것은 정확히 당신이 필요로하는 것입니다 :-) 거기에 비동기 컨트롤러가있을 수 있고 많은 예제가 있습니다.

1

accept을 기다리는 TCP 연결은 연결 백 로그에 저장됩니다 (기본적으로 100 IIRC이며 사용자의 수신기 생성자에서 변경할 수 있습니다). 즉, 수락 대기중인 100 개의 동시 TCP 연결 요청이있을 수 있습니다.

따라서 처리 대기중인 연결 수가 초과하지 않는 한 아무 것도 잃지 않습니다.