Verbindung (SQL, MQTT, XMPP, ..) dauerhaft halten

Hallo liebe User,

ich hab da eine allgemeine Frage zum Verbindungsaufbau zu einem Server-Dienst. Dies betrifft z.B. SQL, MQTT, XMPP, usw.
Die Scripte sehen bei mir zur Zeit so aus, dass ich zuerst einen Verbindungsaufbau ausführe, z.B.


$dbhandle = mysqli_connect($myServer, $myUser, $myPass, $myDB) or die("Verbindung zum SQL_Server Fehlgeschlagen" .  $myServer);
// oder
$mqtt = new phpMQTT($server, $port, $client_id);

,
danach die Werte aus dem Dienst lese oder schreibe und zum Schluss diese Verbindung wieder trenne


mysqli_close($dbhandle);
// oder
$mqtt->close();

und auch das Script so beende.

Jetzt möchte ich bei manchen dieser Dienste, Variablen im Abstand von 2 Sekunden lesen (weshalb und warum sollte hier erstmal egal sein!!) aber nicht ständig einen Verbindungsauf- und dann einen Abbruch auslösen.

Ist es möglich den Verbindungsaufbau zu dem Dienst-Server nur einmal zu erstellen, zu speichern bzw. halten und dann bei den nächsten Scriptaufrufen wieder zu nutzen, ohne einen Verbindungsabbruch.

Leider habe ich hier im Forum nur folgenden Beitrag dazu gefunden https://www.symcon.de/forum/threads/30296-MySQLi-Verbindung-speichern?highlight=sql+verbindung, der mir aber hier nicht weiter hillft.

Würde mich über Lösungsansätze sehr freuen.

Gruß
Ede

Schau mal hier: PHP: The mysqli Extension and Persistent Connections - Manual

Das macht PHP für dich mehr oder weniger transparent, wenn du die Verbindung korrekt öffnest.

paresy

Hallo paresy,

vielen Dank für die Info.
Aber das ist leider nicht das was ich suche. Zum einen funktioniert das „nur“ mit MySQL und nicht mit MQTT oder XMPP Verbindungen und dann ist auch hier ein erneuter Verbindungsaufbau beim Scriptstart notwendig, nur das durch das „Persistent“ die alte / nicht geschlossene Verbindung wieder genutzt wird.

Hauptsächlich suche ich was womit ich XMPP Nachrichten auch empfagen kann.

Gruß

So, nach vielen vielen Stunden bin ich über das Script von Zapp gestoßen
Logitech Harmony Ultimate & Smart Control Hub library
wo eine XMPP/Jabber Kommunikation aufgebaut wird.

Die fehlenden Stichpunkte (jedenfalls für XMPP) um eine dauerhafte Kommunikation aufzubauen und zu halten sind hier „Client Socket“ und „Register Variable“. Für Experten war das sicherlich klar aber mir bis dahin noch nicht bekannt.

Jetzt bin ich beim Umbau des Scripts und beim Testen wiedermal an meine Grenze gekommen und würde mich über Hinweise freuen.

Den Kommunikationsaufbau zu einem XMPP-Server (hier trashserver.net") über ein ClientSocket und eine RegisterVariable kann ich leider nicht vollständig aufbauen.

TXT: 11.05.2020, 14:52:19 |             TRANSMIT | <stream:stream to='trashserver.net' xmlns:stream='http://etherx.jabber.org/streams' xmlns='jabber:client' version='1.0'>
TXT: 11.05.2020, 14:52:19 |             RECEIVED | <?xml version='1.0'?><stream:stream id='18203293528880865801' version='1.0' xml:lang='en' xmlns:stream='http://etherx.jabber.org/streams' from='trashserver.net' xmlns='jabber:client'>
TXT: 11.05.2020, 14:52:19 |             RECEIVED | <stream:features><starttls xmlns='urn:ietf:params:xml:ns:xmpp-tls'><required/></starttls></stream:features>
TXT: 11.05.2020, 14:52:19 |             TRANSMIT | <starttls xmlns='urn:ietf:params:xml:ns:xmpp-tls'><required /></starttls>
TXT: 11.05.2020, 14:52:19 |             RECEIVED | <proceed xmlns='urn:ietf:params:xml:ns:xmpp-tls'/>
TXT: 11.05.2020, 14:52:19 |             TRANSMIT | <auth xmlns='urn:ietf:params:xml:ns:xmpp-sasl' mechanism='PLAIN'>abcdefghijklmnopqrst=</auth>
TXT: 11.05.2020, 14:52:22 |             TRANSMIT | </stream:stream>

Der Server erlaubt nur verschlüsselte Kommunikation und somit akzeptiert er meinen Loginversuch nicht. Auf einem Raspberry konnte ich erfolgreich mit einer PHP Library eine Verbindung, incl. Login aufbauen und auch Nachrichten senden und empfangen. Dort wird aber noch vor dem Login folgender Befehl abgesetzt:

stream_socket_enable_crypto($this->socket, true, STREAM_CRYPTO_METHOD_SSLv23_CLIENT);

Dies ist aber bei IPS nicht möglich, da ich ja kein (PHP)-Socket habe.

Bei Recherchen im Forum bin ich zwar über diesen Beitrag gestolpert, TLS Client Socket
indem aber leider nicht der weitere Lösungsansatz notiert ist, wie eine TLS Client Socket Verbindung erstellt wird.

Hat jemand paar Ideen wie ich hier weiterkomme?

Gruß
Ede