mirror of
https://github.com/dotnet/MQTTnet.git
synced 2026-10-28 17:22:37 +08:00
Refactor logging. Remove TCP adapter from HTTP host if disabled.
This commit is contained in:
@@ -11,6 +11,7 @@
|
|||||||
<requireLicenseAcceptance>false</requireLicenseAcceptance>
|
<requireLicenseAcceptance>false</requireLicenseAcceptance>
|
||||||
<description>MQTTnet is a high performance .NET library for MQTT based communication. It provides a MQTT client and a MQTT server (broker).</description>
|
<description>MQTTnet is a high performance .NET library for MQTT based communication. It provides a MQTT client and a MQTT server (broker).</description>
|
||||||
<releaseNotes> * [Core] Performance optimizations.
|
<releaseNotes> * [Core] Performance optimizations.
|
||||||
|
* [Core] Due to performance reasons the timestamp of log messages is now in UTC format.
|
||||||
* [Client] Received messages are now processed in the worker thread by default. Added a new setting for switching back to dedicated threads.
|
* [Client] Received messages are now processed in the worker thread by default. Added a new setting for switching back to dedicated threads.
|
||||||
* [Server] Added support for other WebSocket sub protocol formats like mqttv-3.1.1 (thanks to @israellot).
|
* [Server] Added support for other WebSocket sub protocol formats like mqttv-3.1.1 (thanks to @israellot).
|
||||||
* [Server] The takeover of an existing client sessions is now treated as a _clean_ disconnect of the previous client.
|
* [Server] The takeover of an existing client sessions is now treated as a _clean_ disconnect of the previous client.
|
||||||
|
|||||||
@@ -25,6 +25,11 @@ namespace MQTTnet.AspNetCore
|
|||||||
.FirstOrDefault(p => p.ToLower().StartsWith("mqtt"));
|
.FirstOrDefault(p => p.ToLower().StartsWith("mqtt"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (subprotocol == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
var adapter = app.ApplicationServices.GetRequiredService<MqttWebSocketServerAdapter>();
|
var adapter = app.ApplicationServices.GetRequiredService<MqttWebSocketServerAdapter>();
|
||||||
using (var webSocket = await context.WebSockets.AcceptWebSocketAsync(subprotocol))
|
using (var webSocket = await context.WebSockets.AcceptWebSocketAsync(subprotocol))
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -31,12 +31,12 @@ namespace MQTTnet.AspNetCore
|
|||||||
|
|
||||||
var eventArgs = new MqttServerAdapterClientAcceptedEventArgs(clientAdapter);
|
var eventArgs = new MqttServerAdapterClientAcceptedEventArgs(clientAdapter);
|
||||||
ClientAccepted?.Invoke(this, eventArgs);
|
ClientAccepted?.Invoke(this, eventArgs);
|
||||||
return eventArgs.SessionTask;
|
return eventArgs.SessionTask ?? Task.CompletedTask;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Dispose()
|
public void Dispose()
|
||||||
{
|
{
|
||||||
StopAsync();
|
StopAsync().GetAwaiter().GetResult();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -14,16 +14,24 @@ namespace MQTTnet.AspNetCore
|
|||||||
{
|
{
|
||||||
if (options == null) throw new ArgumentNullException(nameof(options));
|
if (options == null) throw new ArgumentNullException(nameof(options));
|
||||||
|
|
||||||
|
var logger = new MqttNetLogger();
|
||||||
|
var childLogger = logger.CreateChildLogger();
|
||||||
|
|
||||||
services.AddSingleton(options);
|
services.AddSingleton(options);
|
||||||
services.AddSingleton<IMqttNetLogger>(new MqttNetLogger());
|
services.AddSingleton<IMqttNetLogger>(logger);
|
||||||
|
services.AddSingleton(childLogger);
|
||||||
services.AddSingleton<MqttHostedServer>();
|
services.AddSingleton<MqttHostedServer>();
|
||||||
services.AddSingleton<IHostedService>(s => s.GetService<MqttHostedServer>());
|
services.AddSingleton<IHostedService>(s => s.GetService<MqttHostedServer>());
|
||||||
services.AddSingleton<IMqttServer>(s => s.GetService<MqttHostedServer>());
|
services.AddSingleton<IMqttServer>(s => s.GetService<MqttHostedServer>());
|
||||||
|
|
||||||
services.AddSingleton<MqttWebSocketServerAdapter>();
|
services.AddSingleton<MqttWebSocketServerAdapter>();
|
||||||
services.AddSingleton<MqttTcpServerAdapter>();
|
services.AddSingleton<MqttTcpServerAdapter>();
|
||||||
services.AddSingleton<IMqttServerAdapter>(s => s.GetService<MqttWebSocketServerAdapter>());
|
services.AddSingleton<IMqttServerAdapter>(s => s.GetService<MqttWebSocketServerAdapter>());
|
||||||
services.AddSingleton<IMqttServerAdapter>(s => s.GetService<MqttTcpServerAdapter>());
|
|
||||||
|
if (options.DefaultEndpointOptions.IsEnabled)
|
||||||
|
{
|
||||||
|
services.AddSingleton<IMqttServerAdapter>(s => s.GetService<MqttTcpServerAdapter>());
|
||||||
|
}
|
||||||
|
|
||||||
return services;
|
return services;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -504,20 +504,16 @@ namespace MQTTnet.Client
|
|||||||
|
|
||||||
private void StartReceivingPackets(CancellationToken cancellationToken)
|
private void StartReceivingPackets(CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
_packetReceiverTask = Task.Factory.StartNew(
|
_packetReceiverTask = Task.Run(
|
||||||
() => ReceivePacketsAsync(cancellationToken),
|
() => ReceivePacketsAsync(cancellationToken),
|
||||||
cancellationToken,
|
cancellationToken);
|
||||||
TaskCreationOptions.LongRunning,
|
|
||||||
TaskScheduler.Current);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void StartSendingKeepAliveMessages(CancellationToken cancellationToken)
|
private void StartSendingKeepAliveMessages(CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
_keepAliveMessageSenderTask = Task.Factory.StartNew(
|
_keepAliveMessageSenderTask = Task.Run(
|
||||||
() => SendKeepAliveMessagesAsync(cancellationToken),
|
() => SendKeepAliveMessagesAsync(cancellationToken),
|
||||||
cancellationToken,
|
cancellationToken);
|
||||||
TaskCreationOptions.LongRunning,
|
|
||||||
TaskScheduler.Current);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void StartProcessReceivedPacketAsync(MqttBasePacket packet, CancellationToken cancellationToken)
|
private void StartProcessReceivedPacketAsync(MqttBasePacket packet, CancellationToken cancellationToken)
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ namespace MQTTnet.Diagnostics
|
|||||||
{
|
{
|
||||||
public interface IMqttNetChildLogger
|
public interface IMqttNetChildLogger
|
||||||
{
|
{
|
||||||
IMqttNetChildLogger CreateChildLogger(string source);
|
IMqttNetChildLogger CreateChildLogger(string source = null);
|
||||||
|
|
||||||
void Verbose(string message, params object[] parameters);
|
void Verbose(string message, params object[] parameters);
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ namespace MQTTnet.Diagnostics
|
|||||||
{
|
{
|
||||||
event EventHandler<MqttNetLogMessagePublishedEventArgs> LogMessagePublished;
|
event EventHandler<MqttNetLogMessagePublishedEventArgs> LogMessagePublished;
|
||||||
|
|
||||||
IMqttNetChildLogger CreateChildLogger(string source);
|
IMqttNetChildLogger CreateChildLogger(string source = null);
|
||||||
|
|
||||||
void Publish(MqttNetLogLevel logLevel, string source, string message, object[] parameters, Exception exception);
|
void Publish(MqttNetLogLevel logLevel, string source, string message, object[] parameters, Exception exception);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ namespace MQTTnet.Diagnostics
|
|||||||
|
|
||||||
public event EventHandler<MqttNetLogMessagePublishedEventArgs> LogMessagePublished;
|
public event EventHandler<MqttNetLogMessagePublishedEventArgs> LogMessagePublished;
|
||||||
|
|
||||||
public IMqttNetChildLogger CreateChildLogger(string source)
|
public IMqttNetChildLogger CreateChildLogger(string source = null)
|
||||||
{
|
{
|
||||||
return new MqttNetChildLogger(this, source);
|
return new MqttNetChildLogger(this, source);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -45,11 +45,8 @@ namespace MQTTnet.Implementations
|
|||||||
_defaultEndpointSocket.Bind(new IPEndPoint(options.DefaultEndpointOptions.BoundIPAddress, options.GetDefaultEndpointPort()));
|
_defaultEndpointSocket.Bind(new IPEndPoint(options.DefaultEndpointOptions.BoundIPAddress, options.GetDefaultEndpointPort()));
|
||||||
_defaultEndpointSocket.Listen(options.ConnectionBacklog);
|
_defaultEndpointSocket.Listen(options.ConnectionBacklog);
|
||||||
|
|
||||||
Task.Factory.StartNew(
|
Task.Run(() => AcceptDefaultEndpointConnectionsAsync(_cancellationTokenSource.Token),
|
||||||
() => AcceptDefaultEndpointConnectionsAsync(_cancellationTokenSource.Token),
|
_cancellationTokenSource.Token);
|
||||||
_cancellationTokenSource.Token,
|
|
||||||
TaskCreationOptions.LongRunning,
|
|
||||||
TaskScheduler.Current);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (options.TlsEndpointOptions.IsEnabled)
|
if (options.TlsEndpointOptions.IsEnabled)
|
||||||
@@ -69,11 +66,9 @@ namespace MQTTnet.Implementations
|
|||||||
_tlsEndpointSocket.Bind(new IPEndPoint(options.TlsEndpointOptions.BoundIPAddress, options.GetTlsEndpointPort()));
|
_tlsEndpointSocket.Bind(new IPEndPoint(options.TlsEndpointOptions.BoundIPAddress, options.GetTlsEndpointPort()));
|
||||||
_tlsEndpointSocket.Listen(options.ConnectionBacklog);
|
_tlsEndpointSocket.Listen(options.ConnectionBacklog);
|
||||||
|
|
||||||
Task.Factory.StartNew(
|
Task.Run(
|
||||||
() => AcceptTlsEndpointConnectionsAsync(_cancellationTokenSource.Token),
|
() => AcceptTlsEndpointConnectionsAsync(_cancellationTokenSource.Token),
|
||||||
_cancellationTokenSource.Token,
|
_cancellationTokenSource.Token);
|
||||||
TaskCreationOptions.LongRunning,
|
|
||||||
TaskScheduler.Current);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return Task.FromResult(0);
|
return Task.FromResult(0);
|
||||||
|
|||||||
@@ -25,14 +25,14 @@ namespace MQTTnet
|
|||||||
|
|
||||||
public IManagedMqttClient CreateManagedMqttClient()
|
public IManagedMqttClient CreateManagedMqttClient()
|
||||||
{
|
{
|
||||||
return new ManagedMqttClient(CreateMqttClient(), new MqttNetLogger().CreateChildLogger(string.Empty));
|
return new ManagedMqttClient(CreateMqttClient(), new MqttNetLogger().CreateChildLogger());
|
||||||
}
|
}
|
||||||
|
|
||||||
public IManagedMqttClient CreateManagedMqttClient(IMqttNetLogger logger)
|
public IManagedMqttClient CreateManagedMqttClient(IMqttNetLogger logger)
|
||||||
{
|
{
|
||||||
if (logger == null) throw new ArgumentNullException(nameof(logger));
|
if (logger == null) throw new ArgumentNullException(nameof(logger));
|
||||||
|
|
||||||
return new ManagedMqttClient(CreateMqttClient(), logger.CreateChildLogger(string.Empty));
|
return new ManagedMqttClient(CreateMqttClient(), logger.CreateChildLogger());
|
||||||
}
|
}
|
||||||
|
|
||||||
public IMqttServer CreateMqttServer()
|
public IMqttServer CreateMqttServer()
|
||||||
@@ -45,7 +45,7 @@ namespace MQTTnet
|
|||||||
{
|
{
|
||||||
if (logger == null) throw new ArgumentNullException(nameof(logger));
|
if (logger == null) throw new ArgumentNullException(nameof(logger));
|
||||||
|
|
||||||
return CreateMqttServer(new List<IMqttServerAdapter> { new MqttTcpServerAdapter(logger.CreateChildLogger(string.Empty)) }, logger);
|
return CreateMqttServer(new List<IMqttServerAdapter> { new MqttTcpServerAdapter(logger.CreateChildLogger()) }, logger);
|
||||||
}
|
}
|
||||||
|
|
||||||
public IMqttServer CreateMqttServer(IEnumerable<IMqttServerAdapter> adapters, IMqttNetLogger logger)
|
public IMqttServer CreateMqttServer(IEnumerable<IMqttServerAdapter> adapters, IMqttNetLogger logger)
|
||||||
@@ -53,7 +53,7 @@ namespace MQTTnet
|
|||||||
if (adapters == null) throw new ArgumentNullException(nameof(adapters));
|
if (adapters == null) throw new ArgumentNullException(nameof(adapters));
|
||||||
if (logger == null) throw new ArgumentNullException(nameof(logger));
|
if (logger == null) throw new ArgumentNullException(nameof(logger));
|
||||||
|
|
||||||
return new MqttServer(adapters, logger.CreateChildLogger(string.Empty));
|
return new MqttServer(adapters, logger.CreateChildLogger());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -157,11 +157,9 @@ namespace MQTTnet.Server
|
|||||||
|
|
||||||
private void OnClientAccepted(object sender, MqttServerAdapterClientAcceptedEventArgs eventArgs)
|
private void OnClientAccepted(object sender, MqttServerAdapterClientAcceptedEventArgs eventArgs)
|
||||||
{
|
{
|
||||||
eventArgs.SessionTask = Task.Factory.StartNew(
|
eventArgs.SessionTask = Task.Run(
|
||||||
() => _clientSessionsManager.RunSessionAsync(eventArgs.Client, _cancellationTokenSource.Token),
|
() => _clientSessionsManager.RunSessionAsync(eventArgs.Client, _cancellationTokenSource.Token),
|
||||||
_cancellationTokenSource.Token,
|
_cancellationTokenSource.Token);
|
||||||
TaskCreationOptions.LongRunning,
|
|
||||||
TaskScheduler.Current);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.5" />
|
<PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.8" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|||||||
@@ -17,8 +17,8 @@ namespace MQTTnet.TestApp.NetCore
|
|||||||
Console.WriteLine("Press 'c' for concurrent sends. Otherwise in one batch.");
|
Console.WriteLine("Press 'c' for concurrent sends. Otherwise in one batch.");
|
||||||
var concurrent = Console.ReadKey(true).KeyChar == 'c';
|
var concurrent = Console.ReadKey(true).KeyChar == 'c';
|
||||||
|
|
||||||
var server = Task.Factory.StartNew(async () => await RunServerAsync(), TaskCreationOptions.LongRunning);
|
var server = Task.Run(RunServerAsync);
|
||||||
var client = Task.Factory.StartNew(async () => await RunClientAsync(2000, TimeSpan.FromMilliseconds(10), concurrent), TaskCreationOptions.LongRunning);
|
var client = Task.Run(() => RunClientAsync(2000, TimeSpan.FromMilliseconds(10), concurrent));
|
||||||
|
|
||||||
await Task.WhenAll(server, client).ConfigureAwait(false);
|
await Task.WhenAll(server, client).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user