@vitaliy_balahnin
Новичок в веб-разработке

PHP-клиент для Websocket(socket.io) по wss (SSl от letsencrypt)?

Задача: посредством PHP подключиться к сокету по wss и передать данные. Если глобально, то нужна система уведомлений в реальном времени для пользователей сайта. Бэкэнд на PHP.
Обязательные условия: подключение с использованием сертификата от LetsEncrypt
Сервер: Ubuntu 16.04, PHP 7, Websocket сервер (socket.io или ws), OpenSSL включён, Файлы LetsEncrypt .crt/.ca/.pem
С сервером Websocket и подключением по wss клиента на js вопросов и проблем - нет. А вот с реализацией клиента на php проблема. Если сервер запускаю без SSL, то на php подключаюсь посредством stream_socket_client или fsockopen. Библиотеки пока никакие не пробовал, но гугление показало, что вопрос подключения по wss на PHP довольно частый. А полного ответа не встречалось. Единственные костыли, которые видел около этой темы - это проксирование. Помогите советом куда копать. Или стоит ли попробовать познакомится с Elephant и Ratchet (и есть рабочие примеры для wss)?
Пробовал на PHP stream_context_create + stream_socket_client c различными вариантами параметров, но уже запутался в них. Сейчас получаю или $errno = 0 или Bad Request 400.
$cert = 'путь к сертификату .ca или .pem';
$context = stream_context_create([ 'ssl' => [
         'allow_self_signed' => false,
          'verify_peer'   => true,
          'cafile'        => $cert,
          'local_cert'        => 'путь к сертификату .crt',
        'verify_depth'  => 3,
          'CN_match'      => 'домен',
          'disable_compression' => true,
          'SNI_enabled'         => true,
          'ciphers'             => $ciphers,
          'SNI_server_name' => 'домен'
          'capture_peer_cert' => true,
          'cafile' => $cert,
        'peer_name' => 'домен',
        'ciphers' => $ciphers,
        'disable_compression' => true,
]]);

$socket = stream_socket_client("ssl://домен:4444/web", $errno, $errstr, 30, STREAM_CLIENT_CONNECT, $context);
  • Вопрос задан
  • 3466 просмотров
Пригласить эксперта
Ответы на вопрос 3
https://github.com/walkor/Workerman
Пользовался этим пакетом, всё отлично работает. С let сертификатом.
Ответ написан
Комментировать
У Ratchet есть отдельный клиент Pawl, но решать вопрос с SSL придётся вне зависимости от выбранных пакетов.
Ответ написан
Комментировать
Acuna
@Acuna
Заполнил свой профиль
Лучше всего обращаться к документации, у PHP есть отличный ресурс php.net чем он может по праву гордиться, тут первый же коммент предлагает пример с SSL.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы