Hallo,
ich habe ein (Verständniss-) Problem mit Sockets bzw. Websockets.
Ich möchte mich mit einem existierenden Websocket-Server verbinden (das ist der Websocket Server (als Plugin) https://github.com/Palakis/obs-websocket für das OBS-Studio), was soweit erstmal auch gut funktioniert.
Hier die Kurzform des Codes hierfür:
Jetzt möchte ich die Verbindung zum Websocket-Server für die spätere Verwendung natürlich mit einem Passwort versehen. Wenn ich dies tue muss ich mich natürlich Authentifizieren - das klappt auch. Nur wenn ich jetzt "quasi" authentifiziert weitere requests durchführen möchte kennt der Server mich nicht mehr da ich ja für jeden Request :
1. $sock = fsockopen($host, $port, $errno, $errstr, 2); // Socket öffne
2. Request sende + Antwort erhalte
3. fclose() und den Stream bzw. das Socket wieder schließe.
Und wenn das Socket zu ist und ich ein neues aufmache dann bin ich nicht mehr authentifiziert....
Jetzt wollte ich das so abändern, das folgendes funktioniert :
1.) Socket öffnen / Verbindung herstellen
2.) Authentifizieren (1. Request call sendRequest(...))
3.) Weitere requests durchführen -> was aber nicht funktioniert
4.) Socket schliessen
Kann mir mal bitte wer auf die Sprünge helfen?
Danke euch
ich habe ein (Verständniss-) Problem mit Sockets bzw. Websockets.
Ich möchte mich mit einem existierenden Websocket-Server verbinden (das ist der Websocket Server (als Plugin) https://github.com/Palakis/obs-websocket für das OBS-Studio), was soweit erstmal auch gut funktioniert.
Hier die Kurzform des Codes hierfür:
PHP-Code:
$data['request-type'] = "GetAuthRequired";
$data['message-id'] = "asdasdaas76da7sd6asd6as7d";
$data = json_encode($data);
$authRequired = sendRequest($data, $host, $port, $local, $errno, $errstr);
function sendRequest ($data, $host, $port, $local, $errno, $errstr) {
//WebSocket open
$sock = fsockopen($host, $port, $errno, $errstr, 2);
//WebSocket handshake
fwrite($sock, getHeader($data, $host, $local) ) or die('error:'.$errno.':'.$errstr);
$headers = fread($sock, 2000);
fwrite($sock, hybi10Encode($data)) or die('error:'.$errno.':'.$errstr);
$wsdata = fread($sock, 2000);
$response = hybi10Decode($wsdata);
// websocket close
fclose($sock);
return json_decode($response);
}
function getHeader($data, $host, $local) {
$head = "GET / HTTP/1.1"."\r\n".
"Upgrade: WebSocket"."\r\n".
"Connection: Upgrade"."\r\n".
"Origin: $local"."\r\n".
"Host: $host"."\r\n".
"Sec-WebSocket-Version: 13"."\r\n".
"Sec-WebSocket-Key: asdasdaas76da7sd6asd6as7d"."\r\n".
"Content-Length: ".strlen($data)."\r\n"."\r\n";
return $head;
}
1. $sock = fsockopen($host, $port, $errno, $errstr, 2); // Socket öffne
2. Request sende + Antwort erhalte
3. fclose() und den Stream bzw. das Socket wieder schließe.
Und wenn das Socket zu ist und ich ein neues aufmache dann bin ich nicht mehr authentifiziert....
Jetzt wollte ich das so abändern, das folgendes funktioniert :
1.) Socket öffnen / Verbindung herstellen
2.) Authentifizieren (1. Request call sendRequest(...))
3.) Weitere requests durchführen -> was aber nicht funktioniert
4.) Socket schliessen
Kann mir mal bitte wer auf die Sprünge helfen?
Danke euch