From 12a275918ee86c391bd3a9d9f91977dd139518a6 Mon Sep 17 00:00:00 2001 From: JanEggers Date: Sat, 16 Sep 2017 08:02:48 +0200 Subject: [PATCH 1/4] fixed high load on server --- MQTTnet.Core/Server/MqttClientMessageQueue.cs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/MQTTnet.Core/Server/MqttClientMessageQueue.cs b/MQTTnet.Core/Server/MqttClientMessageQueue.cs index a8845e05..d5f20b0a 100644 --- a/MQTTnet.Core/Server/MqttClientMessageQueue.cs +++ b/MQTTnet.Core/Server/MqttClientMessageQueue.cs @@ -54,6 +54,12 @@ namespace MQTTnet.Core.Server var consumable = _pendingPublishPackets.GetConsumingEnumerable(); while (!cancellationToken.IsCancellationRequested) { + if (_pendingPublishPackets.Count == 0) + { + await Task.Delay(TimeSpan.FromMilliseconds(5)); + continue; + } + var packets = consumable.Take(_pendingPublishPackets.Count).ToList(); try { From d7e2b18247ace472b30abbc382a591930e81bb7e Mon Sep 17 00:00:00 2001 From: JanEggers Date: Sat, 16 Sep 2017 08:10:49 +0200 Subject: [PATCH 2/4] packages that are events form the server may not cause invalid operation exceptions --- MQTTnet.Core/Client/MqttClient.cs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/MQTTnet.Core/Client/MqttClient.cs b/MQTTnet.Core/Client/MqttClient.cs index 3239f548..fa81e253 100644 --- a/MQTTnet.Core/Client/MqttClient.cs +++ b/MQTTnet.Core/Client/MqttClient.cs @@ -249,21 +249,25 @@ namespace MQTTnet.Core.Client if (mqttPacket is MqttPingReqPacket) { await SendAsync(new MqttPingRespPacket()); + return; } if (mqttPacket is MqttDisconnectPacket) { await DisconnectAsync(); + return; } if (mqttPacket is MqttPublishPacket publishPacket) { await ProcessReceivedPublishPacket(publishPacket); + return; } if (mqttPacket is MqttPubRelPacket pubRelPacket) { await ProcessReceivedPubRelPacket(pubRelPacket); + return; } _packetDispatcher.Dispatch(mqttPacket); From f8c01b2168747985fa9d68055deff719dedbb759 Mon Sep 17 00:00:00 2001 From: JanEggers Date: Sat, 16 Sep 2017 08:13:46 +0200 Subject: [PATCH 3/4] fixed invalid operation exception --- MQTTnet.Core/Client/MqttClient.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/MQTTnet.Core/Client/MqttClient.cs b/MQTTnet.Core/Client/MqttClient.cs index fa81e253..31d20daa 100644 --- a/MQTTnet.Core/Client/MqttClient.cs +++ b/MQTTnet.Core/Client/MqttClient.cs @@ -340,8 +340,9 @@ namespace MQTTnet.Core.Client private async Task SendAndReceiveAsync(MqttBasePacket requestPacket) where TResponsePacket : MqttBasePacket { + var wait = _packetDispatcher.WaitForPacketAsync(requestPacket, typeof(TResponsePacket), _options.DefaultCommunicationTimeout); await _adapter.SendPacketsAsync(_options.DefaultCommunicationTimeout, requestPacket).ConfigureAwait(false); - return (TResponsePacket)await _packetDispatcher.WaitForPacketAsync(requestPacket, typeof(TResponsePacket), _options.DefaultCommunicationTimeout).ConfigureAwait(false); + return (TResponsePacket)await wait.ConfigureAwait(false); } private ushort GetNewPacketIdentifier() From d4ef1a730258a2e11b932b150a9f79064baab9f8 Mon Sep 17 00:00:00 2001 From: JanEggers Date: Sat, 16 Sep 2017 08:29:34 +0200 Subject: [PATCH 4/4] fixed code issue --- MQTTnet.Core/Server/MqttClientMessageQueue.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MQTTnet.Core/Server/MqttClientMessageQueue.cs b/MQTTnet.Core/Server/MqttClientMessageQueue.cs index d5f20b0a..ae7cb7a7 100644 --- a/MQTTnet.Core/Server/MqttClientMessageQueue.cs +++ b/MQTTnet.Core/Server/MqttClientMessageQueue.cs @@ -56,7 +56,7 @@ namespace MQTTnet.Core.Server { if (_pendingPublishPackets.Count == 0) { - await Task.Delay(TimeSpan.FromMilliseconds(5)); + await Task.Delay(TimeSpan.FromMilliseconds(5)).ConfigureAwait(false); continue; }