Веб-сокеты на виртуальном хостинге: невозможно из-за самого хостинга или из-за интеграции не-php? - PullRequest
1 голос
/ 03 мая 2019

Я хочу запустить базовое приложение чата на своем виртуальном хостинге. Я бы использовал библиотеку реализации PHP Websockets, Ratchet .

Однако, когда я захожу на информационную страницу веб-сокетов моего общего хостинга (Hostgator), там указывается:

Поддержка PHP Socket? Если вы подключаетесь, это должно работать. Мы не разрешаем клиентам связываться с локальными портами для входящих.

Что это значит? Могу ли я создать свой собственный веб-сокет, запустив команду через ssh? Я бы использовал этот базовый код для его запуска.

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

$server = IoServer::factory(
    new HttpServer(
        new WsServer(
            new Chat()
        )
    ),
    8081
);

$server->run();

Я заметил, что были похожие вопросы, но в большинстве ответов говорилось, что это невозможно, потому что спрашивающий пытался использовать библиотеки веб-сокетов Node.js или Python, которые не поддерживаются большинством общего хостинга.

1 Ответ

1 голос
/ 05 мая 2019

Основной ответ

Общий хостинг, как правило, позволяет прослушивать высокий порт, например тот, который вы используете. Однако на практике возникнет ряд проблем.

Во-первых, веб-сервер, вероятно, будет разрешать входящие входы только 80 (HTTP) и 443 (HTTPS), поэтому порт 8081 будет заблокирован брандмауэром. Ваш прослушиватель PHP будет подключаться к порту, но терпеливо будет ждать трафика, который никогда не приходит.

Во-вторых, некоторые общие хосты будут иметь балансировщик нагрузки перед ними, и они могут быть настроены только для пересылки HTTP-трафика. Поскольку веб-сокеты - это другой протокол, они не будут настроены для пересылки. Та же проблема с портами повторяется и здесь - нестандартные порты переадресовываться не будут.

Чтобы решить эти проблемы, вам нужен собственный веб-сервер, на котором вы можете открывать порты (и настраивать балансировщики нагрузки) любым удобным для вас способом. Это довольно дешево сделать в наши дни - по цене пары кафе в месяц вы можете арендовать небольшой виртуальный сервер. Он не будет иметь столько оперативной памяти, сколько общий сервер, но будет гораздо более гибким.

Проблемы дизайна

Я бы также обратил внимание на использование нестандартных портов для веб-сокетов для обслуживания веб-приложения на стандартных портах 80/443. Это не всегда хорошая идея. Нестандартные порты будут хорошо работать на настольных компьютерах и стандартных домашних интернет-соединениях, но для некоторых офисных или мобильных интернет-соединений вы можете столкнуться с проблемой.

Лучше установить балансировщик нагрузки перед вашим приложением, а затем разрешить ему направлять трафик (Web Socket или HTTP) на основе сигнатуры протокола. Это позволит вам использовать несколько протоколов на порт. Если вы заинтересованы в изучении этого, я рекомендую Traefik с контейнерами Docker - я настроил это, и он действительно работает очень хорошо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...