無論出於何種原因,我無法從客戶端收到來自laravel回聲的任何數據。我正在使用laravel-echo-server(socket.io),redis broadcaster和redis隊列。據我所知,它們都是功能性的。我會帶你瞭解我如何設置測試。首先,我創建了一個UserCreated事件:Laravel回聲從未收到事件
class UserCreated implements ShouldBroadcast
{
use Dispatchable, InteractsWithSockets, SerializesModels;
public $user;
public function __construct($user)
{
$this->user = $user;
}
public function broadcastOn()
{
return new Channel('user-created');
}
public function broadcastAs()
{
return 'user.created';
}
}
然後,測試這個事件,我創建了一個CREATEUSER命令:
class CreateUser extends Command
{
protected $signature = 'create:user {username}';
protected $description = 'Create a new user!';
public function __construct()
{
parent::__construct();
}
public function handle()
{
$user = \Chatter\User::create([
'name' => $this->argument('username'),
'email' => uniqid() . '@gmail.com',
'password' => bcrypt('secret')
]);
event(new \Chatter\Events\UserCreated($user));
}
}
最後,這裏是我的laravel回波-server.json:
{
"authEndpoint": "/broadcasting/auth",
"authHost": "chatter.dev",
"database": "redis",
"databaseConfig": {
"redis": {
"port": "6379",
"host": "localhost"
}
},
"port": 6001,
"protocol": "http",
"sslCertPath": "",
"sslKeyPath": "",
"socketio": {}
}
接下來我跑了php artisan queue:listen
和laravel-echo-server start
。他們都沒有錯誤地跑。 爲了確保服務器的工作,我做了php artisan create:user Bob123
。 它成功了。隊列返回此(控制檯):
[2017-06-01 01:28:27] Processing: Chatter\Events\UserCreated
[2017-06-01 01:28:27] Processed: Chatter\Events\UserCreated
而且laravel回波服務器返回此(控制檯):
CHANNEL user-created
所以,讓我與用戶發送的數據,我創建了一個Vue組件,並在掛載函數中使用了回顯監聽器。這裏是我的組件:
<template>
<div class="container">
<div class="row">
</div>
</div>
</template>
<script>
export default {
mounted() {
console.log('Component mounted.');
window.Echo.channel('user-created')
.listen('.user.created', (data) => {
console.log(data);
});
},
data(){
return {
messages: []
}
}
}
</script>
當我刷新我的網頁,Component mounted
被記錄到控制檯上,所以我敢肯定,它加載。但是,無論出於何種原因,當我發送CreateUser命令時,數據不會記錄到瀏覽器控制檯中。
這裏是你可能會指出一切:
我改變了我的廣播司機在我.env
BROADCAST_DRIVER=redis
CACHE_DRIVER=redis
SESSION_DRIVER=redis
QUEUE_DRIVER=redis
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
我也註釋掉了BroadcastingServiceProvider在app.php配置到Redis的。
現在我想不出任何其他的東西,你可能會指出我已經完成了,但如果我記得其他人,我會更新這個問題。
感謝您的任何幫助。
注:我不熟悉Redis,所以目前我傾向於這是我的問題。簡單地將predis\predis
作爲依賴關係根本就不會像我所要做的那樣。希望這個說明有所幫助。
編輯:
至於建議,我試圖運行redis-server
之前我跑laravel回聲服務器。這是在控制檯返回:
[email protected]:~/Code/Chatter$ redis-server
16342:C 01 Jun 05:45:38.066 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
16342:M 01 Jun 05:45:38.067 * Increased maximum number of open files to 10032 (it was originally set to 1024).
16342:M 01 Jun 05:45:38.067 # Creating Server TCP listening socket *:6379: bind: Address already in use
我想這意味着,Redis的服務器運行,所以我想宅在默認情況下自動啓動。
Github上庫:
對不起這個花了這麼長時間,我很忙個人。這裏是這個項目的github存儲庫的鏈接。如果對版本庫有任何疑問,請告訴我。
https://github.com/Dastur1970/laravel-echo-test
編輯2:
萬一有人需要它,這是我的我用來創建我Echo
實例的代碼。
window.Echo = new Echo({
broadcaster: 'socket.io',
host: window.location.hostname + ':6001'
// auth: {
// headers: {
// 'Authorization': 'bf242984230eb684 1076b91e572e5bbcc81a852471364c49'
// }
// },
// key: '1076b91e572e5bbcc81a852471364c497',
// csrfToken: token.content
});
評論了一些我正在測試的東西。不知道我是否會再次需要,所以我只是留下他們評論。讓我知道是否有任何評論的代碼可能實際上有幫助。
你的Redis服務器前應laravel回聲服務器 –
@NehalHasnayeen能否請您闡述一下我怎麼可能做到這一點開始? – Dastur
你先運行'redis-server',當它啓動並運行時,然後啓動'laravel-echo-server' –