0

MQTT サーバーに接続し、いくつかのメッセージを取得してから、再接続する (切断して再度接続する) 必要があります。

私は sgcWebSockets v4.2.1 と公式の接続コードを使用しています:

// Create websocket client and set server options
oClient := TsgcWebSocketClient.Create(nil);
oClient.Host := 'wss://myserver';
oClient.Port := 443;

// Create MQTT protocol and assign to websocket client
oMQTT := TsgcWSPClient_MQTT.Create(nil);
oMQTT.Client := oClient;

// MQTT Authentication
oMQTT.Authentication.Enabled := True;
oMQTT.Authentication.Username := 'user';
oMQTT.Authentication.Password := 'pass';

// Handle MQTT methods
oMQTT.OnMQTTConnect := OnMQTTConnectHandler;
oMQTT.OnMQTTDisconnect := OnMQTTDisconnectHandler;

// connect to server
oClient.Active := True;

今、私は切断する必要があります。どうすればいいのですか?

いろいろな方法を試しましたが、どれも失敗のようです。次の場合でも、MQTT サーバー ログに「クライアントが切断されました」と表示されるものはありません。

// "RefusedUserPassword" on connecting again
// (since server never got the Disconnect message?)
//oClient.Active := False;

// Invalid control OptCode crash
//oMQTT.Disconnect;
//oClient.Active := False;

// RefusedUserPassword on connecting again
// (since server never got the Disconnect message?)
//oClient.Active := False;
//oMQTT.Disconnect;

// Odd error or no connection
//oMQTT.Disconnect;

sgcWebSockets MQTT を使用してサーバーから切断する (再接続する) 適切な方法は何ですか? それが面倒な場合、古い接続を適切に切断して破棄し、新しい接続を作成するにはどうすればよいですか?

4

1 に答える 1

0

本当の答えではありませんが、それでも回避策です:

if fSGCClient <> nil then
  fSGCClient.Active := False;
FreeAndNil(fSGCClient);

これで、fSGCClient を再作成して、新たに接続できるようになりました。

于 2019-03-01T08:32:02.683 に答える