Задача: каждый запрос должен выполняться не более 1 секунды, иначе его нужно отклонить. При большом количестве запросов, запросы начинаются скапливаться и соответственно, если до них очередь ещё долго не дойдет - отклонить их сразу
Как можно это контролировать? Есть ли какой-то простой способ решения? Или нужно пытаться для каждого запроса добавить секундомер и при достижении 1 секунды пытаться освободить поток?
Ниже реализация сервера, где каждый запрос - это отдельный поток
namespace TestServer
{
internal class AsyncHttpServer : IDisposable
{
public AsyncHttpServer()
{
listener = new HttpListener();
}
public void Start(string prefix)
{
lock (listener)
{
if (!isRunning)
{
listener.Prefixes.Clear();
listener.Prefixes.Add(prefix);
listener.Start();
listenerThread = new Thread(Listen)
{
IsBackground = true,
Priority = ThreadPriority.Highest
};
listenerThread.Start();
isRunning = true;
}
}
}
public void Stop()
{
lock (listener)
{
if (!isRunning)
return;
listener.Stop();
listenerThread.Abort();
listenerThread.Join();
isRunning = false;
}
}
public void Dispose()
{
if (disposed)
return;
disposed = true;
Stop();
listener.Close();
}
private void Listen()
{
while (true)
{
try
{
if (listener.IsListening)
{
var context = listener.GetContext();
Task.Run(() => HandleContextAsync(context));
}
else Thread.Sleep(0);
}
catch (ThreadAbortException)
{
return;
}
catch (Exception error)
{
Console.Write(error);
}
}
}
private async Task HandleContextAsync(HttpListenerContext listenerContext)
{
listenerContext.Response.StatusCode = (int)HttpStatusCode.OK;
using (var writer = new StreamWriter(listenerContext.Response.OutputStream))
writer.WriteLine("");
}
private readonly HttpListener listener;
private Thread listenerThread;
private bool disposed;
private volatile bool isRunning;
}
}
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
как получить getcomponent transform из элемента массива (например, i)?
Экспериментирую с различными обфускаторами, чтобы защитить свой код от повторного использования
Как создать систему строительства на С# в Unity на подобии системы строительства, как в clash of clans? Нужно создать саму сетку строительства на которую...