Switched to a concurrent collection for message queue.

This commit is contained in:
2019-07-24 11:24:34 +03:00
parent c2c41367a7
commit aa141eb88d
4 changed files with 20 additions and 14 deletions
+1 -1
View File
@@ -15,7 +15,7 @@ namespace MTSC_TestServer
static void Main(string[] args)
{
X509Certificate2 certificate = new X509Certificate2("localhost.pfx", "psdsd");
Server server = new Server(555);
Server server = new Server(80);
server.TickRate = 60;
server.ScaleUsage = true;
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(1024);
+4 -4
View File
@@ -186,7 +186,7 @@ namespace MTSC.Common.Http
/// <param name="value">Header value.</param>
public void AddGeneralHeader(GeneralHeadersEnum header, string value)
{
headers.Add(generalHeaders[(int)header], value);
headers[generalHeaders[(int)header]] = value;
}
/// <summary>
/// Add a request header to the message.
@@ -195,7 +195,7 @@ namespace MTSC.Common.Http
/// <param name="value">Header value.</param>
public void AddRequestHeader(RequestHeadersEnum requestHeader, string value)
{
headers.Add(requestHeaders[(int)requestHeader], value);
headers[requestHeaders[(int)requestHeader]] = value;
}
/// <summary>
/// Add a response header to the message.
@@ -204,7 +204,7 @@ namespace MTSC.Common.Http
/// <param name="value">Header value.</param>
public void AddResponseHeader(ResponseHeadersEnum responseHeader, string value)
{
headers.Add(responseHeaders[(int)responseHeader], value);
headers[responseHeaders[(int)responseHeader]] = value;
}
/// <summary>
/// Add an entity header to the message.
@@ -213,7 +213,7 @@ namespace MTSC.Common.Http
/// <param name="value">Header value.</param>
public void AddEntityHeaders(EntityHeadersEnum entityHeader, string value)
{
headers.Add(entityHeaders[(int)entityHeader], value);
headers[entityHeaders[(int)entityHeader]] = value;
}
/// <summary>
/// Build the request bytes based on the message contents.
+12 -6
View File
@@ -2,8 +2,10 @@
using MTSC.Common.Http;
using MTSC.Common.Http.ServerModules;
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Text;
using System.Threading;
namespace MTSC.Server.Handlers
{
@@ -14,7 +16,8 @@ namespace MTSC.Server.Handlers
{
#region Fields
List<IHttpModule> httpModules = new List<IHttpModule>();
Queue<Tuple<ClientData,HttpMessage>> messageQueue = new Queue<Tuple<ClientData, HttpMessage>>();
ConcurrentQueue<Tuple<ClientData,HttpMessage>> messageQueue = new ConcurrentQueue<Tuple<ClientData, HttpMessage>>();
object queueLock = new object();
#endregion
#region Constructors
public HttpHandler()
@@ -37,7 +40,7 @@ namespace MTSC.Server.Handlers
/// Send a response back to the client.
/// </summary>
/// <param name="response">Message containing the response.</param>
public void SendResponse(ClientData client, HttpMessage response)
public void QueueResponse(ClientData client, HttpMessage response)
{
messageQueue.Enqueue(new Tuple<ClientData, HttpMessage>(client, response));
}
@@ -88,7 +91,7 @@ namespace MTSC.Server.Handlers
break;
}
}
SendResponse(client, responseMessage);
QueueResponse(client, responseMessage);
return false;
}
/// <summary>
@@ -116,10 +119,13 @@ namespace MTSC.Server.Handlers
/// </summary>
void IHandler.Tick(Server server)
{
while(messageQueue.Count > 0)
while (messageQueue.Count > 0)
{
Tuple<ClientData, HttpMessage> tuple = messageQueue.Dequeue();
server.QueueMessage(tuple.Item1, tuple.Item2.GetResponse(true));
Tuple<ClientData, HttpMessage> tuple = null;
if (messageQueue.TryDequeue(out tuple))
{
server.QueueMessage(tuple.Item1, tuple.Item2.GetResponse(true));
}
}
}
#endregion
+3 -3
View File
@@ -296,13 +296,13 @@ namespace MTSC.Server
}
}
});
foreach(IHandler handler in handlers)
Parallel.ForEach(handlers, (handler) =>
{
try
{
handler.Tick(this);
}
catch(Exception e)
catch (Exception e)
{
LogDebug("Exception: " + e.Message);
LogDebug("Stacktrace: " + e.StackTrace);
@@ -314,7 +314,7 @@ namespace MTSC.Server
}
}
}
}
});
/*
* Check if there are messages queued to be sent.
*/