Поэтому я довольно долго искал это и перепробовал много вещей, но просто не мог понять, как заставить это работать. Я создал сервер 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
вызвать проблемы с прокси?
Я надеюсь, что кто-то может направить меня в правильном направлении, потому что все «рабочие» решения, которые я нашел, до сих пор не были так полезны.
С уважением
Я создаю 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
и тебе хорошо идти ..
Других решений пока нет …