Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Socket.io未在laravel echo服务器中侦听_Laravel_Vue.js_Redis_Socket.io - Fatal编程技术网

Socket.io未在laravel echo服务器中侦听

Socket.io未在laravel echo服务器中侦听,laravel,vue.js,redis,socket.io,Laravel,Vue.js,Redis,Socket.io,我正在尝试使用socket.io与laravel echo server实现聊天功能,但无法侦听事件 下面是我的代码 bootstrap.js import Echo from 'laravel-echo' window.Echo = new Echo({ broadcaster: 'socket.io', host: 'http://127.0.0.1:6001', auth: { headers: { Authorizatio

我正在尝试使用socket.io与laravel echo server实现聊天功能,但无法侦听事件

下面是我的代码

bootstrap.js

import Echo from 'laravel-echo'

window.Echo = new Echo({
    broadcaster: 'socket.io',
    host: 'http://127.0.0.1:6001',
    auth: {
        headers: {
            Authorization : 'my_bearer token'
        }
    }
});
app.js

require('./bootstrap');

import Vue from 'vue';

const app = new Vue({
    el: '#app',
    data: {
        message:'',
        chat:{
            message:[]
        }
    },
    mounted() {
        console.log('here i can able to subscribe private channel')
        Echo.private('user.1')
            .listen('App\\Events\\SendChatMessage', (e) => {
                console.log('trying first method', e); //unable to listen
            })
            .listen('SendChatMessage', (e) => {
                console.log('trying second method', e); //unable to listen
            });
    } 
});
事件SendChatMessage.php

public function broadcastOn()
{
   return new PrivateChannel('user.1');
}
环境署署长

laravel-echo-server.json

{
    "authHost": "http://127.0.0.1:8000",
    "authEndpoint": "/broadcasting/auth",
    "clients": [
        {
            "appId": "3f4e63443c11bb0d",
            "key": "59e850fecad73c2025c6bab9f2b9ce06"
        }
    ],
    "database": "redis",
    "databaseConfig": {
        "redis": {
            "port": "6379",
            "host": "127.0.0.1"
        },
        "sqlite": {
            "databasePath": "/database/laravel-echo-server.sqlite"
        }
    },
    "devMode": true,
    "host": null,
    "port": "6001",
    "protocol": "http",
    "socketio": {},
    "sslCertPath": "",
    "sslKeyPath": "",
    "sslCertChainPath": "",
    "sslPassphrase": "",
    "subscribers": {
        "http": true,
        "redis": true
    },
    "apiOriginAllow": {
        "allowCors": true,
        "allowOrigin": "http://localhost:80",
        "allowMethods": "GET, POST",
        "allowHeaders": "Origin, Content-Type, X-Auth-Token, X-Requested-With, Accept, Authorization, X-CSRF-TOKEN, X-Socket-Id"
    }
}
我的命令提示符

php artisan队列:侦听

[2021-03-30 23:11:42][feQuvUDNmDg8oEUR6mwXZDQOvzpjLCbZ] Processing: App\Events\SendChatMessage
[2021-03-30 23:11:42][feQuvUDNmDg8oEUR6mwXZDQOvzpjLCbZ] Processed:  App\Events\SendChatMessage
laravel echo服务器启动

[11:10:28 PM] - 74J_fL-s4HNFXv3xAAAP authenticated for: private-user.1
[11:10:28 PM] - 74J_fL-s4HNFXv3xAAAP joined channel: private-user.1
Channel: messer_database_private-user.1
Event: App\Events\SendChatMessage
channel.php

Broadcast::channel('user.{id}', function ($user, $id) {
    return (int) $user->id === (int) $id;
});
广播服务提供商

public function boot()
{
   Broadcast::routes(['middleware' => ['auth:api']]);

   require base_path('routes/channels.php');
}
版本

Laravel: ^8.12
predis/predis": "^1.1

Package.json
laravel-echo": "^1.10.0
socket.io-client": "^4.0.0
vue": "^2.6.12

如果您的前端代码和事件代码正确,我们将非常感谢您的帮助。正如您所看到的,用户id正在进行身份验证,甚至正在广播

但是,事件不会广播到添加用户身份验证的同一频道,因此用户将永远不会收到它。在您的后台代码中,您的频道的前缀是
messer\u数据库


您应该检查您的redis和广播配置,删除前缀或使广播理解前缀。

您的前端代码和事件代码是正确的。正如您所看到的,用户id正在进行身份验证,甚至正在广播

但是,事件不会广播到添加用户身份验证的同一频道,因此用户将永远不会收到它。在您的后台代码中,您的频道的前缀是
messer\u数据库


您应该检查您的redis和广播配置,删除前缀或使广播理解前缀。

您必须删除redis前缀
messer\u数据库

检查
config/database.php
并检查前缀

'redis' => [

        'client' => env('REDIS_CLIENT', 'phpredis'),

        'options' => [
            'cluster' => env('REDIS_CLUSTER', 'redis'),
             'prefix' => env('REDIS_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_database_'),
        ]
  ]


您必须删除Redis前缀
messer\u数据库

检查
config/database.php
并检查前缀

'redis' => [

        'client' => env('REDIS_CLIENT', 'phpredis'),

        'options' => [
            'cluster' => env('REDIS_CLUSTER', 'redis'),
             'prefix' => env('REDIS_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_database_'),
        ]
  ]