클라이언트/서버 인프라가 있습니다. 현재 TcpClient와 TcpListener를 사용하여 모든 클라이언트와 서버간에 수신 데이터를 전송합니다.여러 개의 TCP 클라이언트를 허용하는 가장 좋은 방법은 무엇입니까?
현재 내가하는 일은 데이터를 수신 할 때 (자체 스레드에서) 데이터를받을 때 소켓을 해제하여 새 데이터를 수신 할 수 있도록 다른 스레드가 처리 할 큐에 넣습니다.
// Enter the listening loop.
while (true)
{
Debug.WriteLine("Waiting for a connection... ");
// Perform a blocking call to accept requests.
using (client = server.AcceptTcpClient())
{
data = new List<byte>();
// Get a stream object for reading and writing
using (NetworkStream stream = client.GetStream())
{
// Loop to receive all the data sent by the client.
int length;
while ((length = stream.Read(bytes, 0, bytes.Length)) != 0)
{
var copy = new byte[length];
Array.Copy(bytes, 0, copy, 0, length);
data.AddRange(copy);
}
}
}
receivedQueue.Add(data);
}
그러나 이것을 수행하는 더 좋은 방법이 있는지 알고 싶었습니다. 예를 들어, 10 개의 클라이언트가 있고 동시에 모두 서버에 데이터를 보내려고하면 다른 서버는 모두 실패합니다. 그렇지 않으면 하나의 클라이언트가 느린 연결을 가지고 있고 소켓을 점유하면 다른 모든 통신이 중단됩니다 .
동시에 모든 클라이언트로부터 데이터를 수신하고 다운로드 완료시 처리를 위해 큐에 수신 된 데이터를 추가 할 수있는 방법이 있습니까?
뻔뻔한 플러그 : http://jonathan.dickinsons.co.za/blog/2011/02/net-sockets-and-you/ - 비동기 루프를 짧게 터치합니다. 실제의 구현을 포함하고 있습니다 (@Jalal가 제안한 것처럼'ThreadPool'을 사용해서는 안됩니다). –