Allow Nagle’s algorithm to be disabled via IKestrelServerInformation.NoDelay
This commit is contained in:
parent
c809beec18
commit
8f0d1179ab
|
|
@ -23,6 +23,7 @@ namespace SampleApp
|
|||
{
|
||||
var ksi = app.ServerFeatures.Get<IKestrelServerInformation>();
|
||||
//ksi.ThreadCount = 4;
|
||||
ksi.NoDelay = true;
|
||||
|
||||
loggerFactory.MinimumLevel = LogLevel.Debug;
|
||||
|
||||
|
|
|
|||
|
|
@ -25,6 +25,7 @@ namespace Microsoft.AspNet.Server.Kestrel.Http
|
|||
{
|
||||
var socket = new UvTcpHandle(Log);
|
||||
socket.Init(Thread.Loop, Thread.QueueCloseHandle);
|
||||
socket.NoDelay(NoDelay);
|
||||
socket.Bind(ServerAddress);
|
||||
socket.Listen(Constants.ListenBacklog, ConnectionCallback, this);
|
||||
return socket;
|
||||
|
|
@ -39,6 +40,7 @@ namespace Microsoft.AspNet.Server.Kestrel.Http
|
|||
{
|
||||
var acceptSocket = new UvTcpHandle(Log);
|
||||
acceptSocket.Init(Thread.Loop, Thread.QueueCloseHandle);
|
||||
acceptSocket.NoDelay(NoDelay);
|
||||
|
||||
try
|
||||
{
|
||||
|
|
|
|||
|
|
@ -25,6 +25,7 @@ namespace Microsoft.AspNet.Server.Kestrel.Http
|
|||
{
|
||||
var socket = new UvTcpHandle(Log);
|
||||
socket.Init(Thread.Loop, Thread.QueueCloseHandle);
|
||||
socket.NoDelay(NoDelay);
|
||||
socket.Bind(ServerAddress);
|
||||
socket.Listen(Constants.ListenBacklog, ConnectionCallback, this);
|
||||
return socket;
|
||||
|
|
@ -39,6 +40,7 @@ namespace Microsoft.AspNet.Server.Kestrel.Http
|
|||
{
|
||||
var acceptSocket = new UvTcpHandle(Log);
|
||||
acceptSocket.Init(Thread.Loop, Thread.QueueCloseHandle);
|
||||
acceptSocket.NoDelay(NoDelay);
|
||||
|
||||
try
|
||||
{
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@ namespace Microsoft.AspNet.Server.Kestrel.Http
|
|||
{
|
||||
var acceptSocket = new UvTcpHandle(Log);
|
||||
acceptSocket.Init(Thread.Loop, Thread.QueueCloseHandle);
|
||||
acceptSocket.NoDelay(NoDelay);
|
||||
return acceptSocket;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -9,6 +9,8 @@ namespace Microsoft.AspNet.Server.Kestrel
|
|||
{
|
||||
int ThreadCount { get; set; }
|
||||
|
||||
bool NoDelay { get; set; }
|
||||
|
||||
IConnectionFilter ConnectionFilter { get; set; }
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -15,6 +15,8 @@ namespace Microsoft.AspNet.Server.Kestrel
|
|||
|
||||
public int ThreadCount { get; set; }
|
||||
|
||||
public bool NoDelay { get; set; }
|
||||
|
||||
public IConnectionFilter ConnectionFilter { get; set; }
|
||||
|
||||
public void Initialize(IConfiguration configuration)
|
||||
|
|
|
|||
|
|
@ -202,6 +202,15 @@ namespace Microsoft.AspNet.Server.Kestrel.Networking
|
|||
Check(_uv_tcp_open(handle, hSocket));
|
||||
}
|
||||
|
||||
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
|
||||
protected delegate int uv_tcp_nodelay(UvTcpHandle handle, int enable);
|
||||
protected uv_tcp_nodelay _uv_tcp_nodelay = default(uv_tcp_nodelay);
|
||||
public void tcp_nodelay(UvTcpHandle handle, bool enable)
|
||||
{
|
||||
handle.Validate();
|
||||
Check(_uv_tcp_nodelay(handle, enable ? 1 : 0));
|
||||
}
|
||||
|
||||
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
|
||||
protected delegate int uv_pipe_init(UvLoopHandle loop, UvPipeHandle handle, int ipc);
|
||||
protected uv_pipe_init _uv_pipe_init = default(uv_pipe_init);
|
||||
|
|
|
|||
|
|
@ -61,6 +61,11 @@ namespace Microsoft.AspNet.Server.Kestrel.Networking
|
|||
_uv.tcp_open(this, hSocket);
|
||||
}
|
||||
|
||||
public void NoDelay(bool enable)
|
||||
{
|
||||
_uv.tcp_nodelay(this, enable);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns an <see cref="IPEndPoint"/> for the given host an port.
|
||||
/// If the host parameter isn't "localhost" or an IP address, use IPAddress.Any.
|
||||
|
|
|
|||
|
|
@ -61,7 +61,8 @@ namespace Microsoft.AspNet.Server.Kestrel
|
|||
AppLifetime = _appLifetime,
|
||||
Log = new KestrelTrace(_logger),
|
||||
DateHeaderValueManager = dateHeaderValueManager,
|
||||
ConnectionFilter = information.ConnectionFilter
|
||||
ConnectionFilter = information.ConnectionFilter,
|
||||
NoDelay = information.NoDelay
|
||||
});
|
||||
|
||||
disposables.Push(engine);
|
||||
|
|
|
|||
|
|
@ -22,6 +22,7 @@ namespace Microsoft.AspNet.Server.Kestrel
|
|||
Log = context.Log;
|
||||
DateHeaderValueManager = context.DateHeaderValueManager;
|
||||
ConnectionFilter = context.ConnectionFilter;
|
||||
NoDelay = context.NoDelay;
|
||||
}
|
||||
|
||||
public IApplicationLifetime AppLifetime { get; set; }
|
||||
|
|
@ -33,5 +34,7 @@ namespace Microsoft.AspNet.Server.Kestrel
|
|||
public DateHeaderValueManager DateHeaderValueManager { get; set; }
|
||||
|
||||
public IConnectionFilter ConnectionFilter { get; set; }
|
||||
|
||||
public bool NoDelay { get; set; }
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue