@s2sk1337

Как запустить WebSocket на сайте с CloudFlare?

Всем привет.

Написал сокет сервер на PHP + Ratchet. Залил на ВДС и запустил сервер. Запустился. После чего залил JS код... Зашел на страницу началось... Сначала не хотел коннектить потому что сайт на HTTPS, а сокет соединение WS и нужно поставить WSS, поставил WSS появилась такая ошибка "Error in connection establishment: net::ERR_SSL_PROTOCOL_ERROR". Для HTTPS использую CloudFlare, там я веб сокеты в настройках включил, но толку ноль... Пробовал коннектиться к серверу напрямую, а не через домен. Тогда опять ошибка что сайт на безопасном подключении, а сокет через WS идет. А если буду коннектится на прямую к серверу но уже через WSS то таймаут ошибка.

Собственно код сервера:

<?php

	use Ratchet\Server\IoServer;
	use Ratchet\Http\HttpServer;
	use Ratchet\WebSocket\WsServer;
	use mmsg\messages;

    require dirname(__DIR__) . '/vendor/autoload.php';

    $server = IoServer::factory(
        new HttpServer(
            new WsServer(
                new messages()
            )
        ),
        8080
    );

    $server->run();
?>


И код коннекта к ниму

var
	socket = new WebSocket("ws или wss://ipservera или domen:8080");


Не знаю даже что делать...
  • Вопрос задан
  • 1050 просмотров
Пригласить эксперта
Ответы на вопрос 1
@BorisKorobkov Куратор тега PHP
Web developer
Если html-страница на https, то в целях безопасности загрузка (включая сокеты) с http запрещена.
Надо, чтобы сокет-сервер работал тоже на https. Например, так:
if (fs.existsSync('ssl/cert.key') && fs.existsSync('ssl/cert.crt')) {
    options = {
      key: fs.readFileSync('ssl/cert.key'),
      cert: fs.readFileSync('ssl/cert.crt')
    };
    server = require('https').Server(options, express);
  } else {
    server = require('http').Server(express);
  }

  io = require('socket.io').listen(server);


А уж будет он напрямую или через CloudFlare - значения не имеет.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы