Я хочу реализовать простой веб-сокет на php с простым ответом (ответ по дате / времени). Я пробовал эту реализацию, но в итоге получил неизвестный ответ об ошибке.
HTML - Клиент
<html>
<body>
<div id="root"></div>
<script>
var host = 'wss://myWebsite.com:8090/simple-ws/ws.php';
var socket = new WebSocket(host);
socket.onmessage = function(e) {
document.getElementById('root').innerHTML = e.data;
};
socket.onerror = function(e) {
console.warn('Error FE', e)
};
</script>
</body>
</html>
PHP - Сервер
<?php
try {
$address = 'https://myWebsite.com/';
$port = 8090;
// Create WebSocket.
$server = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_set_option($server, SOL_SOCKET, SO_REUSEADDR, 1);
socket_bind($server, $address, $port);
socket_listen($server);
$client = socket_accept($server);
// Send WebSocket handshake headers.
$request = socket_read($client, 5000);
preg_match('#Sec-WebSocket-Key: (.*)\r\n#', $request, $matches);
$key = base64_encode(pack(
'H*',
sha1($matches[1] . '258EAFA5-E914-47DA-95CA-C5AB0DC85B11')
));
$headers = "HTTP/1.1 101 Switching Protocols\r\n";
$headers .= "Upgrade: websocket\r\n";
$headers .= "Connection: Upgrade\r\n";
$headers .= "Sec-WebSocket-Version: 13\r\n";
$headers .= "Sec-WebSocket-Accept: $key\r\n\r\n";
socket_write($client, $headers, strlen($headers));
// Send messages into WebSocket in a loop.
while (true) {
sleep(1);
$content = 'Now: ' . time();
$response = chr(129) . chr(strlen($content)) . $content;
socket_write($client, $response);
}
} catch (Exception $e) {
echo 'Error on ws'.$e;
}
?>
Через 4-6 секунд получаю ответ:
Соединение WebSocket с 'wss: //myWebsite.com: 8090 / simple-ws / ws.php' не выполнено: ошибка при установлении соединения: net :: ERR_CONNECTION_TIMED_OUT
Ответ об ошибке от обратного вызова onerror:
{
bubble: false,
cancelBubble: false,
cancelable: false,
type: "error",
target: WebSocket {url: "wss://myWebsite.com:8090/simple-ws/ws-php", readyState: 3}
}
set_time_limit (0);
в начало вашего PHP-скрипта, чтобы он не истек. Вы также можете проверить, есть ли у вас на это разрешение. - person DasBaconfist   schedule 01.02.2018