C\#Mqtt 단선 재연 결 실현 코드
사용 하 는 Mqtt 구성 요 소 는 M2Mqtt.Net.dll 입 니 다.
일부 특성 발견
(1)제 공 된 서버 주 소 를 분석 할 수 없 으 면 MqtClient 대상 을 예화 할 수 없 는 이상 이 발생 할 수 있 습 니 다.
(2)Connect 가 연결 되 지 않 을 때 이상 이 발생 하고 IsConnected 는 false 입 니 다.
(3)서버 에서 회 의 를 중단 하고 클 라 이언 트 의 ConnectionClosed 사건 을 촉발 합 니 다.IsConnected 는 false 입 니 다.
(4)다시 연결 하려 면 구독 테 마 를 다시 구독 해 야 합 니 다.
(5)Mqtclient.Subscribe 의 첫 번 째 매개 변 수 는 구독 테마 배열 이 고 두 번 째 는 해당 하 는 qos Level 이 며 두 배열 의 길 이 는 일치 해 야 합 니 다.그렇지 않 으 면 이상 합 니 다.
중 련 공정 제어
주요 코드 구현
(1)스 레 드 주체
//
private void _TryContinueConnect()
{
if (IsConnected) return;
Thread retryThread = new Thread(new ThreadStart(delegate
{
while (_MqttClient == null || !_MqttClient.IsConnected)
{
if (_ToClose) break;
if (_MqttClient == null)
{
_BuildClient();
Thread.Sleep(3000);
continue;
}
try
{
_TryCount++;
_Connect();
}
catch (Exception ce)
{
Debug.WriteLine("re connect exception:" + ce.Message);
}
// 2
if (!_MqttClient.IsConnected)
{
Thread.Sleep(2000);
}
}
}));
retryThread.Start();
}
(2)실례 화 부분
//
private void _BuildClient()
{
try
{
_MqttClient = new MqttClient(_MqttServer);
}
catch (Exception e)
{
Debug.WriteLine("build client error:" + e.Message);
return;
}
//
_MqttClient.MqttMsgPublishReceived += client_MqttMsgPublishReceived;
//
_MqttClient.ConnectionClosed += (sender, e) =>
{
if (!_ToClose)
{
//
_TryContinueConnect();
}
};
}
(3)연결 부분 시도
// ,
private void _Connect()
{
if (String.IsNullOrEmpty(_MqttUsername))
{
var b = _MqttClient.Connect(_MqttClientId);
}
else
{
var b = _MqttClient.Connect(_MqttClientId, _MqttUsername, _MqttUserpass);
}
if (_MqttClient.IsConnected)
{
_MqttClient.Subscribe(new string[] { "topic1", "topic2" },
new byte[] { MqttMsgBase.QOS_LEVEL_AT_MOST_ONCE, MqttMsgBase.QOS_LEVEL_AT_MOST_ONCE });
}
}
실측 효과 가 좋 은 데,그 중에서 시간 지연 은 적당 하 게 조정 할 수 있다.이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
WebView2를 Visual Studio 2017 Express에서 사용할 수 있을 때까지Evergreen .Net Framework SDK 4.8 VisualStudio2017에서 NuGet을 사용하기 때문에 패키지 관리 방법을 packages.config 대신 PackageReference를 사용해야...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.