PHP Websocket на LAMP Ubuntu

Так что я уже довольно давно искал это и пробовал много вещей, но просто не мог понять, как заставить это работать. Я создал сервер PHP WebSocket (храповик) на моем локальном компьютере, используя XAMPP и интерфейс angular (v5), работал без каких-либо проблем.

Затем я попытался развернуть оба экземпляра DigitalOcean, где запущен стек LAMP, потому что приложение - это больше, чем просто чат WebSocket, а все остальное (RESTful API) работает нормально, но когда JavaScript пытается подключиться к WS, я получаю

 WebSocket connection to 'ws://<ip-address>:8888/chat' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED

Итак, что я сделал, так это включил моды apache2 proxy и proxy_wstunnel и создал запись для vhost

<VirtualHost *:8080>
    DocumentRoot /var/www/html_backend/web

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    <Directory "/var/www/html_backend/web">
            AllowOverride All
            Allow from All
    </Directory>

    ProxyRequests Off
    ProxyPass "/chat/" "ws://localhost:8888/"
    # also tried 0.0.0.0 and 127.0.0.1 instead of localhost
</VirtualHost>

Серверный сокет PHP запускается так

public function actionStart() {
    $app = new App('localhost', 8888, '0.0.0.0');
    $app->route('/chat', new Chat());
    $app->run();
}

И в JS я пытаюсь подключиться к этому

this._socket = new WebSocket('ws://<ip-address>:8888/chat');

Я также попробовал его на порту 8080, откуда он должен быть проксирован, но затем он вернул ошибку 404.

На порту 80 у меня есть интерфейс, а на порту 8080 - сервер, который пока работает. Я могу запустить WebSocket на порту 8888, который не дал мне никаких ошибок, которые я обнаружил, но при попытке подключиться к нему я получаю верхнее сообщение об ошибке. Это просто для тестирования, и у меня еще нет сертификата SSL, но сначала я хотел, чтобы это работало, или мне он нужен? Я перепробовал множество комбинаций URL, найденных по всему Интернету, но пока ни одна из них не работала.

Во время записи я заметил, что сокет запускается с /var/www/html_backend, а не с /var/www/html_backend/web. Может ли DocumentRoot вызывать проблемы с проксированием?

Я надеюсь, что кто-то может указать мне правильное направление, потому что все "рабочие" решения, которые я нашел, пока не были столь полезны.

Наилучшие пожелания

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

ArtisticPhoenix 18.04.2018 09:21

@ArtisticPhoenix не в первый раз слышу это про сокеты ... xD, но да, порты открыты.

Fussel 18.04.2018 09:26

Я построил один в качестве эксперимента около 3 лет назад, а затем решил использовать RabbitMq, поскольку у него было больше функций, чем я мог когда-либо надеяться создать или поддержать.

ArtisticPhoenix 18.04.2018 09:28

Я посмотрю, но пока я бы хотел, чтобы это работало просто ради этого

Fussel 18.04.2018 09:33

вы не пробовали ::1, но я сомневаюсь, что проблема в этом. Какой браузер вы используете, Chrome? Я только что прочитал, что Chrome не разрешает соединения без SSL, вы можете попробовать FIrefox. Я никогда не предлагаю попробовать IE или Edge, я прожил дни IE6 ... lol

ArtisticPhoenix 18.04.2018 09:40

Я попробую Firefox позже, немного испортил порты и не могу открыть соединение putty или ftp прямо сейчас, так как у меня нет с собой ssl-ключей.

Fussel 18.04.2018 09:50
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
6
1 197
1

Ответы 1

Я создаю Websocket с PHP Linux и использую Digitalocean, и его рабочее реле хорошо (мой пример с wss, но вы также можете сделать это с ws).

как я это строю:

Веб-сокет с храповым механизмом на стороне сервера:

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

Apache httpd-ssl.conf:

<VirtualHost _default_:443>
ProxyPass /wss2/ ws://your.domain:8000

Ваш файл js:

wss://your.domain/wss2/

чем просто запустить php websocket в храповике с помощью команды: php server.php и тебе хорошо ..

Является ли wss2 маршрутом по умолчанию при использовании new WsServer(..);? и пробовали ли вы это на порте, отличном от порта по умолчанию / будет ли wss://your.domain:8080/wss2/ работать с JS?

Fussel 18.04.2018 10:12

это не значение по умолчанию, поэтому мы настраиваем файл httpd-ssl (по умолчанию: your.domain). и вы должны использовать один и тот же порт на сервере и в клиенте

Yaakov Swissa 18.04.2018 11:22

Хорошо, но я имею в виду, что сейчас в моем коде есть этот $app->route('/chat', new Chat());, а в моем виртуальном хосте - ProxyPass "/chat/" "ws://localhost:8888/". Нужно ли мне подключаться к ws://your.domain:8080/chat/chat для заполнения этого маршрута или как это работает? Но позже я просто попробую ваш код создания сервера. знак равно

Fussel 18.04.2018 11:29

добавьте порт в маршрут и в своем js измените его на: ws: //your.domain/chat (или просто попробуйте мой полный комментарий)

Yaakov Swissa 18.04.2018 12:00

Другие вопросы по теме