Das*_*tur 12 php redis laravel laravel-echo laravel-5.4
无论出于何种原因,我无法从laravel echo接收客户端的任何数据.我正在使用laravel-echo-server(socket.io),redis广播公司和redis队列.据我所知,它们都是功能性的.我会带你了解我如何进行测试.首先,我创建了一个UserCreated事件:
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';
}
}
Run Code Online (Sandbox Code Playgroud)
然后,为了测试此事件,我创建了一个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));
}
}
Run Code Online (Sandbox Code Playgroud)
最后,这是我的laravel-echo-server.json:
{
"authEndpoint": "/broadcasting/auth",
"authHost": "chatter.dev",
"database": "redis",
"databaseConfig": {
"redis": {
"port": "6379",
"host": "localhost"
}
},
"port": 6001,
"protocol": "http",
"sslCertPath": "",
"sslKeyPath": "",
"socketio": {}
}
Run Code Online (Sandbox Code Playgroud)
接下来我跑了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
Run Code Online (Sandbox Code Playgroud)
并且laravel-echo-server返回了这个(在控制台中):
CHANNEL user-created
Run Code Online (Sandbox Code Playgroud)
因此,为了获得我与用户一起发送的数据,我创建了一个Vue组件,在挂载的函数中有一个echo侦听器.这是我的组件:
<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>
Run Code Online (Sandbox Code Playgroud)
当我刷新我的网页时,Component mounted登录到控制台,所以我确定它已加载.但是,无论出于何种原因,当我发送CreateUser命令时,数据都不会记录到浏览器控制台中.
以下是您可能指出的所有内容:
我将我的广播驱动程序改为redis .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
Run Code Online (Sandbox Code Playgroud)
我还在app.php配置中取消注释了BroadcastingServiceProvider.
我现在想不出任何其他事情,你可能会指出我已经完成了,但如果我记得其他人,我会更新问题.
谢谢你的帮助.
注意:我对Redis并不熟悉,所以目前我倾向于认为这是我的问题.简单地添加predis\predis作为依赖只是不觉得这就是我所要做的.希望这个说明有所帮助.
编辑:
正如所建议的,我redis-server在运行laravel-echo-server之前尝试过运行.这是在控制台中返回的内容:
vagrant@homestead:~/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
Run Code Online (Sandbox Code Playgroud)
我认为这意味着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
});
Run Code Online (Sandbox Code Playgroud)
注释掉了我正在测试的一些东西.不确定我是否会再次需要,所以我只是让他们评论.如果任何评论的代码可能实际上有用,请告诉我.
我已在本地 PC 上设置了您的 GIT 存储库并遇到了问题。
您正在使用名为“Chatter”的自定义命名空间,因此您已在 JS 代码中显式定义了该命名空间,以便 Echo 可以知道如何找到该 Event 类。
因此,只需将 public/js/app.js 中的“UserCreated”更改为“.Chatter.Events.UserCreated”即可:
mounted: function mounted() {
console.log('Component mounted.');
console.log(window.Echo);
window.Echo.channel('user-created').listen('.Chatter.Events.UserCreated', function (data) {
console.log('tester123');
});
},
Run Code Online (Sandbox Code Playgroud)
更多信息: https: //laravel.com/docs/master/broadcasting#namespaces
| 归档时间: |
|
| 查看次数: |
1612 次 |
| 最近记录: |