问题摘要:


连接到test.mosquitto.org或iot.eclipse.org并保持5分钟以上,一切似乎都按预期工作。
连接到我的代理(都在Azure托管的VM上-一个是Mosquitto,一个是Emqttd),如果保持活动时间超过5分钟,则我的客户端不会发送ping命令。他们只是死了。代理最终由于无法ping通而断开了它们的连接。我没有使用Azure负载平衡器,而是直接连接到VM。

问题是,连接的设备不知道它是否通过单元网络断开连接(不是确定原因吗?)

通过以太网,它会自动重新连接。

不确定Azure VM的独特之处是否导致我断开连接/ timeout问题,保持时间更长?

最后,如果我使用2分钟或更短的保持时间,一切正常。

评论

只是一个猜测,但我认为可能是在Azure防火墙/路由器中,该路由器在路由/转发到实际主机时具有不活动计时器。

您的评论让我开始思考,我发现了这一点:stackoverflow.com/questions/16840834/…

#1 楼

我发现了我的问题以及解决方法。如果其他人有类似问题,请在此处发布,以确保完整性。

可以使用公共ip地址创建Azure虚拟机(资源管理器,不是经典)。这是管理空闲超时的地方。默认为4分钟。

如果单击门户中的IP地址,您将被带到该VM的公共IP刀片服务器。

选择配置在菜单中查看该刀片。有一个标记为“空闲超时(分钟)”的滑块。进行调整,然后单击顶部的保存。

或者,可以通过powershell

    Login-AzureRmAccount 
    Set-AzureRmContext -SubscriptionId "subscription name"
    $publicIpAddress = Get-AzureRmPublicIPAddress -Name "ip address name" -ResourceGroupName "resource group name"
    $publicIpAddress.IdleTimeoutInMinutes = 29
    Set-AzureRmPublicIpAddress -PublicIpAddress $publicIpAddress

进行配置。

评论


您可以将此答案标记为已接受,然后它应会出现在更高级别的搜索中

– hardillb
18 Mar 8 '18 at 20:17

#2 楼

只是为了完成这个问题。

评论中已经解决了。看来Azure的路由器会丢弃闲置5分钟的连接。有关详细信息,请参见此堆栈溢出答案:https://stackoverflow.com/questions/16840834/are-built-network-connections-to-azure-endpoint-terminated-by-firewall-or

#3 楼

这。



我不记得是从哪里捕获的,因此无法链接到源。但是,所有这些信息都可以准确地确定信息。

是的,Microsoft应该在其Azure Linux映像中引入更合适的值。