2
我正在創建一個windows服務,它接受TCP連接,處理髮送到服務器的數據,然後返回一條消息,說明過程已完成。有幾個客戶端將連接到該服務,並且該數量正在增長。爲了處理這些消息,我認爲使用非阻塞結構將是理想的。從最初的搜索,BeginAcceptTcpClient
似乎是我正在尋找。我正在尋找at this tutorial以獲得樣本,但我有幾個問題如何工作。我的代碼基於這個例子如下。開始/異步tcplistener如何工作
- 在
OnClientConnected
函數中,爲什麼需要再次調用WaitForClients
?爲什麼聽衆不一直都在聽呢? - 如果在再次調用
WaitForClients
之前再次嘗試連接,會發生什麼情況?我知道這是OnClientConnected
中的第一個聲明,但可能有兩個連接發生「同一時間」 - 我無法真正理解這是如何工作的多線程方面。如果我有10個模擬連接,看起來第一個將會輸入
OnClientConnected
,然後調用WaitForClients
,這將允許處理另一個連接。這似乎是一種一次一個連接的方式,而不是有幾個可以處理大量流量的線程。
public class DeviceListener
{
private TcpListener listener = null;
public DeviceListener()
{
listener = new TcpListener(1001);
}
public void StartListener()
{
listener.Start();
//TODO: Log listening started here
WaitForClients();
}
private void WaitForClients()
{
listener.BeginAcceptTcpClient(OnClientConnected, null);
}
private void OnClientConnected(IAsyncResult asyncResult)
{
WaitForClients();
TcpClient client = listener.EndAcceptTcpClient(asyncResult);
if(client != null)
{
//TODO: Log connected
HandleClientRequest(client);
}
}
private void HandleClientRequest(TcpClient client)
{
//Code to process client request
}
}