Я не могу найти никакой информации о настройке wss-соединения в PHP. У меня нет проблем с подключением throw ws. Я использую эту довольно большую библиотеку, чтобы сделать это, кстати: https://github.com/albeva/php–websocket
Но мой сайт использует https, и мне нужно подключение к WebSocket Secure, чтобы Firefox не жаловался на то, что соединение небезопасно.
Заранее спасибо за вашу помощь.
редактировать
Вот код, используемый библиотекой для запуска соединения сокета:
$master = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); if (!is_resource($master)) { $this->throwSocketError(); } // set options if (!socket_set_option($master, SOL_SOCKET, SO_REUSEADDR, 1)) { $this->throwSocketError(); } // bind if (!socket_bind($master, $this->host, $this->port)) { $this->throwSocketError(); } // listen for connections if (!socket_listen($master, SOMAXCONN)) { $this->throwSocketError(); }
Я считаю, что мне нужно изменить этот код, но я не могу найти его.
Вы пытались stream_socket_server ?
<?php $socket = stream_socket_server("ssl://0.0.0.0:".$port, $errno, $errstr); if (!$socket) { echo "$errstr ($errno)<br />\n"; } else { while ($conn = stream_socket_accept($socket)) { fwrite($conn, 'some data...\n'); fclose($conn); } fclose($socket); } ?>
Вот пример (и ссылка), который был слегка изменен и найден из другого сообщения SO. Ссылка на другое сообщение
И вот ссылка на определение функции php stream_context_create. определение функции
try { $localCertificateFilespec = $connection['localCertificateFilespec']; $localCertificatePassphrase = $connection['localCertificatePassphrase']; $sslOptions = array( 'ssl' => array( 'local_cert' => $localCertificateFilespec, 'passphrase' => $localCertificatePassphrase, 'allow_self_signed' => true, 'verify_peer' => false ) ); $sslContext = stream_context_create($sslOptions); $clientArguments = array( 'stream_context' => $sslContext, 'local_cert' => $localCertificateFilespec, 'passphrase' => $localCertificatePassphrase, 'trace' => true, 'exceptions' => true, 'encoding' => 'UTF-8', 'soap_version' => SOAP_1_1 ); $oClient = new WSSoapClient($connection['wsdlFilespec'], $clientArguments); $oClient->__setUsernameToken($connection['username'], $connection['password']); return $oClient->__soapCall($operation, $request); }
Однако в самом низу связанного сообщения SO вы найдете ответ от «Сэма». Мне нужно сделать то же самое в ближайшие несколько недель, поэтому я планирую использовать метод Сэм … поскольку я больше поклонник CURL в PHP.
Ваш лучший снимок на PHP в настоящее время должен использовать Ratchet . Лучший способ настроить соединение wss – поставить ваш сервер websocket за Nginx или HAProxy, который будет обрабатывать все материалы SSL для вас. Это объясняется здесь HAProxy. Обратите внимание, что вы можете сделать то же самое с Nginx, так как теперь он также поддерживает WebSocket.