Асинхронный сервер - C#
Формулировка задачи:
всем привет. У меня есть асинхронный сервер, который получает данные следующим образом:
Когда от клиента посылаются 2 запроса подряд, и если сервер не успел обработаться 1-ый запрос, то 2-ой просто пропадёт. Как сделать так, чтоб запрос вставал в очередь, и после обработке 1-го запроса началась обрабтка 2-го?
Пробовал так:
Всёравно....
Можно сделать так конечно:
Но тогда создаются N потоков для прослушки....а если клиентов много, то это не вариант...
private void OnRecieved(IAsyncResult ar)
{
Socket sock = (Socket)ar.AsyncState;
byte[] aryRet = GetRecievedData(ar);
if (aryRet.Length < 1)
{
this.OnDisconnected();
this.Disconnect();
}
else
{
// Обрабатываю запрос //
sock.BeginReceive(byteData, 0, byteData.Length, SocketFlags.None, new AsyncCallback(OnRecieved), m_sock);
}
}private void OnRecieved(IAsyncResult ar)
{
Socket sock = (Socket)ar.AsyncState;
byte[] aryRet = GetRecievedData(ar);
if (aryRet.Length < 1)
{
this.OnDisconnected();
this.Disconnect();
}
else
{
sock.BeginReceive(byteData, 0, byteData.Length, SocketFlags.None, new AsyncCallback(OnRecieved), m_sock);
// Обрабатываю запрос //
}
}for(int i=0;i<N;i++) sock.BeginReceive(byteData, 0, byteData.Length, SocketFlags.None, new AsyncCallback(OnRecieved), m_sock);
Решение задачи: «Асинхронный сервер»
textual
Листинг программы
sock.BeginReceive(byteData, 0, byteData.Length, SocketFlags.None, new AsyncCallback(OnRecieved), sock)