ProfileUpdated.php:
class ProfileUpdated implements ShouldBroadcast
{
use Dispatchable, InteractsWithSockets, SerializesModels;
public $data;
public function __construct()
{
$this->data = [
'power'=> '10'
];
}
public function broadcastOn()
{
return new PrivateChannel('test-channel');
}
}
bootstrap.js:
window.Echo = new Echo({
broadcaster: 'socket.io',
host: window.location.hostname + ':3000',
authEndpoint: 'http://localhost/sock/public/broadcasting/auth',
auth: {
headers: {
Authorization: 'Bearer ' + '123456',
},
},
});
channels.php:
Broadcast::channel('test-channel.{id}', function ($user, $id) {
return true;
});
views/layouts/master.blade.php:
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>FiveOne Socket.io</title>
<meta name="csrf-token" content="{{ csrf_token() }}">
</head>
<body>
@yield('content')
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
<script src="{{ asset('js/app.js') }}"></script>
@yield('footer')
</body>
</html>
views/layouts/test.blade.php:
@extends('layouts.master')
@section('content')
<p id="power">0</p>
@stop
@section('footer')
{{-- <script src="{{ asset('js/socket.io.js') }}"></script> --}}
<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.2.0/socket.io.js"></script>
<script>
window.Echo.private('test-channel.1')
.listen('ProfileUpdated', (message) => {
console.log(message);
$('#power').text(parseInt($('#power').text()) + parseInt(message.data.power));
});
</script>
@stop
laravel-echo-server.js:
{
"authHost": "http://localhost",
"authEndpoint": "/broadcasting/auth",
"clients": [
{
"appId": "16d858df454bc9ca",
"key": "2b2a5e635e336904671891632b15db3d"
}
],
"database": "redis",
"databaseConfig": {
"redis": {},
"sqlite": {
"databasePath": "/database/laravel-echo-server.sqlite"
}
},
"devMode": true,
"host": null,
"port": "3000",
"protocol": "http",
"socketio": {},
"sslCertPath": "",
"sslKeyPath": "",
"sslCertChainPath": "",
"sslPassphrase": "",
"subscribers": {
"http": true,
"redis": true
},
"apiOriginAllow": {
"allowCors": true,
"allowOrigin": "*",
"allowMethods": "*",
"allowHeaders": "*"
}
}
config/app.php:
App\Providers\BroadcastServiceProvider::class, // is commented out
web.php:
Route::get('fire', function () {
event(new App\Events\ProfileUpdated());
return "event fired";
});
Route::get('test', function () {
return view('test');
});
.env:
BROADCAST_DRIVER=redis
Это все мои файлы, связанные с laravel / event / broadcast / redis / socket.io / laravel echo.Когда я запускаю laravel-echo-server start
в консоли, он возвращает сообщение об ошибке: Sending auth request to: http://localhost/broadcasting/auth
BpCgX4rFE2tf2CwRAAAA could not be authenticated to private-test-channel.1
.Как я могу это исправить?localhost
не так там?Должен ли я иметь маршрут для broadcasting/auth
?У меня должен быть определенный порт для этого?Что там есть?если это аутентификация пользователя, поэтому я возвратил true в routes/channels.php
.
Обратите внимание, что я не использовал аутентификацию по умолчанию для laravel с php artisan make:auth
.
Кстати, это не таквозникли проблемы и работают нормально при использовании публичного канала.
ОБНОВЛЕНИЕ Я отредактировал laravel-echo-server.js
с:
"authHost": "http://localhost",
"authEndpoint": "/broadcasting/auth",
до:
"authHost": "http://localhost/sock/public",
"authEndpoint": "/broadcasting/auth",
и создал новый маршрут:
Route::any('/broadcasting/auth', function () {
return 'true';
});
, и он вернул:
-G8OS2X2BnBPWLnSAAAC authenticated for: private-test-channel.1
-G8OS2X2BnBPWLnSAAAC joined channel: private-test-channel.1
при запуске laravel-echo-server start
и вернул:
Channel: private-test-channel
Event: App\Events\ProfileUpdated
при открытииhttp://localhost/sock/public/fire
.
Но теперь проблема в том, что здесь не выводится полученное значение:
window.Echo.private('private-test-channel.1')
.listen('ProfileUpdated', (message) => {
console.log(message); // HERE it doesn't print the message in console!
$('#power').text(parseInt($('#power').text()) + parseInt(message.data.power));
});
ОБНОВЛЕНИЕ 2
IВы загрузили и установили Laravel-Realtime-Chat
с github, и снова это работает для набора текста, который находится на общедоступном канале, но он не отправляет сообщение даже в публичном / приватном чате в режиме реального времени.Так что, похоже, проблема с моим ПК / Laravel / Firewall.Как я могу преодолеть эту проблему?
Спасибо