Warum WebSocket?
Wenn Du Daten aus Access an WordPress senden willst, denkst Du wahrscheinlich an REST oder Mail.
Aber für Live-Daten (Statusänderungen, Push-Nachrichten, Log-Events) ist das zu langsam.
WebSocket kann’s besser: dauerhaft offen, reaktiv, direkt.
Mit einem kleinen Gateway zwischen Access und WordPress bekommst Du Live-Kommunikation – ohne polling, ohne Plugin-Massaker.
Architekturüberblick
| Komponente | Aufgabe |
|---|---|
| Access VBA | sendet Events als JSON |
| WebSocket-Gateway | empfängt und verteilt Events |
| WordPress (JS) | zeigt Daten live im Frontend |
Das Gateway läuft unabhängig – z. B. als Node.js-Dienst auf einem Server oder Docker.
Access sendet dorthin, WordPress lauscht.
Schritt 1: WebSocket-Gateway (Node.js)
Ein minimales Beispiel:
const WebSocket = require('ws');
const wss = new WebSocket.Server({ port: 8080 });
wss.on('connection', function connection(ws) {
console.log('Client verbunden');
ws.on('message', function incoming(message) {
console.log('Empfangen:', message);
// Nachricht an alle Clients senden
wss.clients.forEach(function each(client) {
if (client.readyState === WebSocket.OPEN) {
client.send(message);
}
});
});
});
Das Gateway steht und wartet auf Nachrichten.
Port 8080 muss erreichbar sein – idealerweise via SSL-Proxypass.
Schritt 2: Access sendet Events an Gateway
VBA kann keine WebSockets.
Aber Du kannst über WinHttp.WinHttpRequest POSTs an ein kleines Hilfs-API schicken – das dann an den WebSocket broadcastet.
Oder: Du nutzt eine lokale CLI wie websocat oder curl.
Variante: Senden via Shell
Public Sub SendeEventAnWebSocketGateway(payload As String)
Dim cmd As String
cmd = "cmd /c echo " & payload & " | websocat.exe ws://localhost:8080"
Shell cmd, vbHide
End Sub
Oder mit PowerShell:
Shell "powershell -Command ""$msg = '" & payload & "'; $ws = New-Object System.Net.WebSockets.ClientWebSocket; $uri = [uri]'ws://localhost:8080'; $ws.ConnectAsync($uri, $null).Wait();""" ' (verkürzt)
Oder Du nutzt ein Proxy-Gateway, das HTTP akzeptiert und WebSocket weiterleitet.
Schritt 3: Ereignis in Access erfassen
Private Sub Form_AfterUpdate()
Dim json As String
json = "{""event"":""update"",""table"":""tbl_Kunden"",""id"":" & Me.ID & "}"
Call SendeEventAnWebSocketGateway(json)
End Sub
Oder bei Statusänderung:
If Me.Status <> Me.Status_Old Then
Call SendeEventAnWebSocketGateway("{""event"":""status_change"",""status"":""" & Me.Status & """}")
End If
Schritt 4: WordPress-Frontend lauscht
Du brauchst ein wenig JavaScript. Kein Plugin nötig.
<script>
const ws = new WebSocket("wss://dein-gateway.de:8080");
ws.onmessage = function (event) {
const data = JSON.parse(event.data);
console.log("Live-Daten empfangen:", data);
// Z. B. DOM aktualisieren
if (data.event === "status_change") {
document.getElementById("statusAnzeige").innerText = data.status;
}
};
</script>
Das funktioniert auch in Elementor, ACF, WooCommerce – überall, wo Du Custom JS einbauen darfst.
Optional: Broadcast filtern
Du kannst im Gateway z. B. nur an bestimmte Clients senden:
if (message.includes('"event":"kundenbereich"')) {
// nur an eingeloggte Kunden weiterleiten
}
Oder Du fügst client_id, role, channel im JSON mit.
Sicherheit & Performance
- Gateway absichern (IP-Filter, Token, TLS)
- Kein direkter DB-Zugriff über WebSocket
- Nur Events – keine Massendaten
- Access sendet nur selektiv
- WordPress zeigt nur, was erlaubt ist
Wenn Du’s richtig baust, läuft das auch bei vielen gleichzeitigen Clients.
Die Schafgabe:
REST ist okay für Abfragen.
Aber wenn Access etwas meldet, will ich das in Echtzeit sehen – auf dem Handy, im Browser, auf’m Monitor im Lager.
WebSocket macht das möglich.
Access ist nicht modern – aber mit ein bisschen Gateway-Magie wird’s fast so agil wie Node.js.
Und das Schaf? Das sagt sofort Bescheid, wenn sich was ändert. Live.