Я реализовал веб-сокет, используя приведенный ниже код,
try {
console.log('wss://' + hostname + ':' + port + endpoint);
webSocket = new WebSocket(webSocketURL);
webSocket.onmessage = function (event) {
//console.log('send message successfully.');
var obj = JSON.parse(event.data);
append_data(obj, market_pair);
};
} catch (exception) {
console.log('Exception handle!');
console.error(exception);
}
Моя страница поддерживает https, поэтому я использую протокол wss.но проблема в том, что это дает мне ошибку, что «Firefox не может установить соединение с сервером по адресу wss: //domainname.com: 4008 / order.php», если я загружу страницу, используя простой http и использую ws в websocket, тогдаработает нормально, но с wss это показывает ошибку выше.таким же образом в Google Chrome он также не сможет подключиться.Мой ssl-сертификат правильно установлен на сервере, а мой хостинг и домен предоставлены в godaddy, и мне сказали, что сертификат установлен правильно.
Я использую сокет на стороне сервера в php, и теперь он работает нормально, теперь могу подключитьсяк этому порту сокета с помощью wss: //
Я обнаружил, что не могу выполнить квитирование с использованием своего php-кода, потому что мой php-файл работает в фоновом режиме, а содержимое, которое я получаю при чтении через сокет, зашифровано.
function doHandshake($received_header, $client_socket_resource, $host_name, $port) {
echo $received_header;
$headers = array();
$lines = preg_split("/\r\n/", $received_header);
foreach ($lines as $line) {
$line = chop($line);
if (preg_match('/\A(\S+): (.*)\z/', $line, $matches)) {
$headers[$matches[1]] = $matches[2];
}
}
$secKey = $headers['Sec-WebSocket-Key'];
echo $headers['Sec-WebSocket-Key'];
$secAccept = base64_encode(pack('H*', sha1($secKey . '258EAFA5-E914-47DA-95CA-C5AB0DC85B11')));
//$secAccept = base64_encode(sha1($secKey . '258EAFA5-E914-47DA-95CA-C5AB0DC85B11'));
$buffer = "HTTP/1.1 101 Web Socket Protocol Handshake\r\n" .
"Upgrade: websocket\r\n" .
"Connection: Upgrade\r\n" .
"WebSocket-Origin: $host_name\r\n" .
"WebSocket-Location: wss://$host_name:$port/websocket/btc_boon_pair.php\r\n" .
"Sec-WebSocket-Accept:$secAccept\r\n\r\n";
socket_write($client_socket_resource, $buffer, strlen($buffer));
}
это моя функция квитирования $ headers ['Sec-WebSocket-Key'] не определена, потому что $ receive_header зашифрован.
Может кто-нибудь предложить решение этой проблемы?Я должен запустить php файл как демон и хочу подключиться по протоколу wss.