apache — PHP Websocket на LAMP Ubuntu

Поэтому я довольно долго искал это и перепробовал много вещей, но просто не мог понять, как заставить это работать. Я создал сервер PHP WebSocket (храповик) на своем локальном компьютере, используя XAMPP и угловой интерфейс (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 вызвать проблемы с прокси?

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

С уважением

0

Решение

Я создаю 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
и тебе хорошо идти ..

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]