Я использую PHP сервер WebSocket. Я пытался
подключиться к нему с JavaScript. Каждый раз, когда у меня появляется ошибка.
Но соединение через PHP работает нормально
Ошибка:
Соединение WebSocket с 'ws: //xxx.xxx. xxx.xx / websocket / 'не удалось: ошибка во время рукопожатия WebSocket: непредвиденный код ответа: 200
Я часами пытался найти решение. Мой код сервера WebSocket выглядит следующим образом:
<?php
error_reporting(E_ALL);
echo "<h2>TCP/IP-Verbindung</h2>\n";
/* Den Port für den WWW-Dienst ermitteln. */
$service_port = getservbyname('www', 'tcp');
/* Die IP-Adresse des Zielrechners ermitteln. */
$address = gethostbyname('localhost');
/* Einen TCP/IP-Socket erzeugen. */
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
echo "socket_create() fehlgeschlagen: Grund: " . socket_strerror(socket_last_error()) . "\n";
} else {
echo "OK.\n";
}
echo "Versuche, zu '$address' auf Port '$service_port' zu verbinden ...";
$result = socket_connect($socket, $address, $service_port);
if ($result === false) {
echo "socket_connect() fehlgeschlagen.\nGrund: ($result) " . socket_strerror(socket_last_error($socket)) . "\n";
} else {
echo "OK.\n";
}
$in = "HEAD / HTTP/1.1\r\n";
$in .= "Host: www.example.com\r\n";
$in .= "Connection: Close\r\n\r\n";
$out = '';
echo "HTTP HEAD request senden ...";
socket_write($socket, $in, strlen($in));
echo "OK.\n";
echo "Serverantwort lesen:\n\n";
while ($out = socket_read($socket, 2048)) {
echo $out;
}
echo "Socket schließen ...";
socket_close($socket);
echo "OK.\n\n";
?>
Мой код JavaScript для создания соединения выглядит следующим образом:
var connection = new WebSocket('ws://xxx.xxx.xxx.xx:80/websocket');
// When the connection is open, send some data to the server
connection.onopen = function () {
connection.send('Ping'); // Send the message 'Ping' to the server
};
// Log errors
connection.onerror = function (error) {
console.log('WebSocket Error ' + error);
};
// Log messages from the server
connection.onmessage = function (e) {
console.log('Server: ' + e.data);
};