2013-02-17 63 views
2

我已閱讀以下文章以創建一個簡單的http服務: Create a Simple Threaded HTTP Server with C# 在實現某些功能之前,我遇到了一些困難。Http服務器 - 收聽回覆

我有一個服務發送http請求到多個目標(同時限制最大目標),並接收來自每個目標的響應。 如果請求處理正確或不正確,則響應很短,只有狀態(如果正確,則爲200或其他代碼)。

上面的文章在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 2013-02-17 14:22:40

+0

@spender我明白了。可能是我沒有徹底思考過它。我的目標是將信息發送到一長串目的地。信息的每次傳輸可以包含一個小的查詢請求或文件傳輸到目的地。我想同時提交最多X個傳輸,並等待迴應。那麼對我而言,一個簡單的簡單請求可能就足夠了?謝謝 – Guy 2013-02-17 15:09:26

回答

1

你是否扼要的ASP.net Webapi?這應該正是你需要的dp :-) 在那裏你也可以有異步控制器,並有大量的例子。

1

正在等待accept的TCP連接放入連接待辦事項(默認情況下爲100 IIRC,您可以在偵聽器構造函數中更改該連接)。這意味着可以有100個併發的TCP連接請求等待被接受。

因此,除非您擁有超過等待處理的連接數量,否則您將不會丟失任何數據。