我对广播/websockets很陌生,我正在尝试设置Laravel Websockets和pusher。
使用我的subdomain.example.com
,我可以让subdomain.example.com/laravel-websockets
工作,当我使用php artisan tinker触发事件时,当我在页面上创建事件时,事件会在屏幕上列出。但是,我需要在路径subdomain.example.com/api/laravel-websockets
内完成此工作
当我尝试使用/api
的URL时,尽管它按预期加载了 Jmeter 板,但它无法连接,从控制台中可以看到它忽略了请求中的/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
是我的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/
编辑
我看到如果我在dashboard.blade.php
中将api/
添加到JavaScript请求路径中,我可以让这个工作,这让我认为解决方案是运行该文件的版本。但我不认为这解决了整个问题。我宁愿正确地做这件事。(参见下面的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']
});
3条答案
按热度按时间z6psavjg1#
我正在使用Laravel 6.x,在
dashboard.blade.php
中,我在第121和165行用Request::getRequestUri()
替换了request()->path()
,这提供了一个动态解决方案,但我仍然不得不订购供应商dashboard.blade.php
文件。在GitHub上开了一个问题。unftdfkk2#
我不会把这个标记为答案,直到有人有更好的建议,但我不得不覆盖
dashboard.blade.php
,并在resources/views/beyondcode/laravel-websockets/dashboard.blade.php
中创建自己的一个,并在所有调用的地方添加/api
。这实际上解决了另一个问题,我也有关于没有得到真实的时间图。
xjreopfe3#
WebSocket Jmeter 板的默认位置是/laravel-websockets。路由会自动注册。您可以通过在config/websockets.php文件中更改路径设置来更改默认位置。
变更自:
收件人: