我已经使用自己的实现成功地使用Laravel设置了websockets。现在我想切换到Laravel Echo和laravel-echo-server。但是,经过几个小时的尝试和阅读我能找到的每一份文件,我确实需要进一步的帮助。
触发事件时发生的事情:队列工作人员根据需要处理事件:" 已处理:照亮\广播\广播事件"。但是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>
活动的部分内容&#34; NewsPublished&#34;:
class NewsPublished implements ShouldBroadcast {
use InteractsWithSockets, SerializesModels;
public function broadcastOn() {
return new Channel('mychan');
}
public function broadcastAs() {
return 'myevent';
}
}
..我正在用event(new App\Events\NewsPublished());
我希望在切换时能从laravel-echo-server中获取一些信息&#34; devMode&#34;到 true 。但这似乎没有改变任何东西!
答案 0 :(得分:4)
在您的redis配置中,您已将 http:// 作为主机的协议包含在内。您需要删除协议,只需使用 localhost 或 127.0.0.1
{
...
"databaseConfig": {
"redis": {
"port": "6379",
"host": "localhost"
}
...
}
*旁白:如果你有能力使用套接字,可以考虑使用“path”:“/ path / to / sockfile”代替“host”;这更多的是关于性能,但我确信这种修正应该让它发挥作用。
供参考,这是我正在使用的laravel-echo-server.json配置的编辑版本。
{
"appKey": [omitted],
"authEndpoint": "/broadcasting/auth",
"authHost": "http://localhost",
"database": "redis",
"databaseConfig": {
"redis": {
"db": 2, /*this is an intentional change; the default is zero(0)*/
"path": "/tmp/redis.sock",
"password": [omitted]
}
},
"devMode": false,
"host": "",
"port": "6001",
"referrers": [
{
"host": "*", /*matches any referrer*/
"apiKey": [omitted]
}
],
"sslCertPath": "",
"sslKeyPath": "",
"verifyAuthPath": true,
"verifyAuthServer": false
}