【发布时间】:2017-02-24 06:09:02
【问题描述】:
我已经通过自己的实现成功地使用 Laravel 设置了 websocket。现在我想切换到 Laravel Echo 和 laravel-echo-server。但是,经过数小时的尝试和阅读我能找到的所有文档后,我确实需要进一步的帮助。
当我触发事件时发生了什么:队列工作人员根据需要处理事件:“已处理:Illuminate\Broadcasting\BroadcastEvent”。但是在 laravel-echo-server 控制台和客户端都没有发生任何事情。
一些信息:
Laravel 在 8001 端口上运行
Redis 在 6379 上运行
队列工作者正在运行(php artisan queue:work)
Laravel、Redis 和 laravel-echo-server 在同一台机器上运行 (192.168.134.214)
在尝试私有通道时,
BroadcastServiceProvider中的身份验证似乎有效(如果失败,服务器会将错误写入控制台)客户端使用 laravel-echo-server 的 socket.io 脚本:
<script src="//192.168.134.214:6001/socket.io/socket.io.js"></script>
我的 .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
laravel-echo-server.json:
{
"appKey": "<myAppKey>",
"authEndpoint": "/broadcasting/auth",
"authHost": "http://localhost:8001",
"database": "redis",
"databaseConfig": {
"redis": {
"port": "6379",
"host": "http://localhost"
}
},
"devMode": true,
"host": "192.168.134.214",
"port": "6001",
"sslCertPath": "",
"sslKeyPath": ""
}
app.js
import Echo from "laravel-echo"
window.Echo = new Echo({
broadcaster: 'socket.io',
host: 'http://192.168.134.214:6001',
});
app.blade.php
<script>
Echo.channel('mychan')
.listen('myevent', (e) => {
console.log('Hello World!', e);
});
</script>
部分事件“NewsPublished”:
class NewsPublished implements ShouldBroadcast {
use InteractsWithSockets, SerializesModels;
public function broadcastOn() {
return new Channel('mychan');
}
public function broadcastAs() {
return 'myevent';
}
}
..我正在使用event(new App\Events\NewsPublished()); 触发事件
我希望在将“devMode”切换为 true 时从 laravel-echo-server 中获取一些信息。但这似乎并没有改变任何东西!
【问题讨论】:
-
我怀疑这是否是问题所在,但
php artisan queue:work不会启动队列工作人员侦听作业的进程——它只是处理队列中的下一个作业然后退出。我想你正在寻找php artisan queue:listen。
标签: php laravel laravel-5 websocket socket.io