Я довольно новичок в широковещании / веб-сокетах и пытаюсь настроить Laravel Веб-сокеты и толкатель.
Используя мой subdomain.example.com
, я могу заставить subdomain.example.com/laravel-websockets
работать, и события отображаются на экране когда я запускаю их с помощью php ремесленник-тинкер и когда создаю событие на странице. Однако мне нужна эта работа внутри пути subdomain.example.com/api/laravel-websockets
Когда я пытаюсь URL-адрес с /api
, хотя он загружает панель мониторинга, как и ожидалось, он не может подключиться и, глядя в консоль, я вижу, что он игнорирует /api
в своих запросах, например, для Auth: http://subdomain.example.com/laravel-websockets/auth
вместо http://subdomain.example.com/api/laravel-websockets/auth
. Это относится ко всему в консоли. Даже когда я редактирую запрос в консоли, чтобы добавить /api
, он работает.
Где-нибудь я могу изменить базовый путь?
Вот мой файл .env
:
APP_URL=http://subdomain.example.com/api/
LOG_CHANNEL=daily
BROADCAST_DRIVER=pusher
CACHE_DRIVER=file
SESSION_DRIVER=file
QUEUE_DRIVER=sync
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
APP_NAME==test
PUSHER_APP_ID=1234
PUSHER_APP_KEY=1234
PUSHER_APP_SECRET=secret
PUSHER_APP_CLUSTER=mt1
Вот мой config/websockets.php
конфиг толкателя
'dashboard' => [
'port' => env('LARAVEL_WEBSOCKETS_PORT', 6001),
],
'apps' => [
[
'id' => env('PUSHER_APP_ID'),
'name' => env('APP_NAME'),
'key' => env('PUSHER_APP_KEY'),
'secret' => env('PUSHER_APP_SECRET'),
'enable_client_messages' => true,
'enable_statistics' => true,
],
],
и мой config/broadcasting.php
'driver' => 'pusher',
'key' => env('PUSHER_APP_KEY'),
'secret' => env('PUSHER_APP_SECRET'),
'app_id' => env('PUSHER_APP_ID'),
'options' => [
'cluster' => env('PUSHER_APP_CLUSTER'),
'encrypted' => true,
'host' => '127.0.0.1',
'port' => 6001,
'scheme' => 'http'
],
],
Редактировать: Добавление моей конфигурации в показать, как работает / api, где /var/www/example
- папка root моего Laravel приложения
<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName subdomain.example.com
ServerAlias subdomain.example.com
Alias /api /var/www/example/public
<Directory /var/www/example/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
RewriteEngine On
</Directory>
DocumentRoot /var/www/example/client-side
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
в public / .htaccess У меня есть следующее:
RewriteBase /api/
Редактировать
Я вижу, что я могу заставить это работать, если я добавлю api/
к путям запроса javascript прямо в dashboard.blade.php
, что заставляет меня думать решение есть версия этого файла работает. Однако я не думаю, что это решает общую проблему. Я бы предпочел сделать это правильно. (см. authEndpoint
ниже)
connect() {
this.pusher = new Pusher(this.app.key, {
wsHost: this.app.host === null ? window.location.hostname : this.app.host,
wsPort: this.port === null ? 6001 : this.port,
wssPort: this.port === null ? 6001 : this.port,
wsPath: this.app.path === null ? '' : this.app.path,
disableStats: true,
authEndpoint: '/api/{{ request()->path() }}/auth',
auth: {
headers: {
'X-CSRF-Token': "{{ csrf_token() }}",
'X-App-ID': this.app.id
}
},
enabledTransports: ['ws', 'flash']
});