WebSocket ist wie folgt eingerichtet:
Code: Select all
let ws = null;
// [...]
// set up websocket stuff
ws = new WebSocket('wss://redacted.com/ws/');
Code: Select all
let jOut = {act: 'u', typ: '+', usr: uname, grp: gname, tstamp: nowTimestamp()};
ws.send(JSON.stringify(jOut));
Code: Select all
console.log('At ws.close()');
if (ws.readyState === WebSocket.OPEN) {
console.log('WebSocket is open, attempting to close');
ws.close();
} else {
console.log('WebSocket isn\'t open, not closing');
}
Beim Anzeigen der Entwicklertools in Firefox, Safari und Brave wird angezeigt, dass die Textrahmen (Opcode 0x1) erfolgreich gesendet wurden, aber ich sehe nie, dass der Schließrahmen (Opcode 0x8) gesendet wurde.
Auf der Serverseite, z Beim Debuggen führe ich meinen PHP-Socket-Server in der Befehlszeile aus. Ich habe einige Debug-Ausgaben für stdout eingerichtet und sehe nur, dass der Opcode 0x1 von den Web-App-Chat-Clients (die in Firefox, Safari oder Brave ausgeführt werden) empfangen wird. Ich sehe nie den Close Frame (0x8) oder einen anderen Opcode.
Der PHP-Socket-Server ist wie folgt eingerichtet:
Code: Select all
// create socket server
$server = stream_socket_server("tcp://127.0.0.1:8088", $errno, $errstr);
Code: Select all
$read = $clients; // copy $clients[] to $read[][
$read[] = $server; // add $server to $read[]
$except = null; // unused but variable needed for stream_select
$write = null; // unused but variable needed for stream_select
// wait for a stream to have data or time out after 200 ms
if (stream_select($read, $write, $except, 0, 200000))
{
// [...]
}
Code: Select all
// this is a client, so read their data
$data = fread($sock, 8192);
if ($data === '') {
// nothing available right now, but not EOF
continue;
}
if ($data !== '' && $data !== false)
{
fwrite(STDOUT, "Received frame: " . bin2hex($data) . "\n"); // Full frame in hex
fwrite(STDOUT, "Received hex opcode: " . dechex(ord($data[0]) & 15) . "\n");
}
Code: Select all
Received frame: 81cad2260131a90460[...]
Received hex opcode: 1
Received frame: 81da632b9f561809fe[...]
Received hex opcode: 1
Received frame: 81ca90cdaafdebefcb[...]
Received hex opcode: 1
Ich habe umfangreiche Websuchen durchgeführt und mit zwei verschiedenen KI-Engines herumgeprobbelt, und es war unproduktiv. Ich frage mich, ob jemand eine Idee hat, warum ws.close() nicht auf den Web-Clients ausgeführt wird, warum sie den Schließrahmen nicht an den Server senden, während Textrahmen einwandfrei funktionieren (scheint kein Netzwerkproblem zu sein).
Mobile version