无法从 Socket.io 获得响应

Not able to get the response from Socket.io

我正在尝试创建一个简单的聊天应用程序,我正在尝试收听私人频道,但我无法收听。不知道哪里出错了我的代码如下。

文件:Chat.vue

export default {
        props: {
            user: {
                type: Object,
                required: true
            }
        },
        data() {
            return {
                selectedContact: null,
                messages: [],
                contacts: []
            };
        },
        mounted() {
            window.Echo.private(`chats.${this.user.id}`)
            .listen('NewChatMessage', (e) => {
                console.log('heared');
                // this.handleIncoming(e.message);
            });

            console.log('mounted');

            axios.get('/chat/contacts')
            .then((response) => {
                this.contacts = response.data;
            });
        },
        methods: {
            startConversationWith(contact) {
                axios.get(`/chat/conversation/${contact.id}`)
                .then((response) => {
                    this.messages = response.data;
                    this.selectedContact = contact;
                });
            },
            saveNewMessage(text) {
                this.messages.push(text);
            },
            handleIncoming(message) {
                if(this.selectedContact && this.selectedContact.id == message.from) {
                    this.saveNewMessage(message);
                }
            }
        },
        components: {Conversation, ContactsList}
    }

文件名:routes/channels.php

Broadcast::channel('chats.{id}', function ($user, $id) {
    return (int) $user->id === (int) $id;
});

文件名:app/Events/NewChatMessage.php

class NewChatMessage implements ShouldBroadcast
{
    use Dispatchable, InteractsWithSockets, SerializesModels;

    public $chat;

    public $broadcastQueue = 'chat';

    /**
     * Create a new event instance.
     *
     * @return void
     */
    public function __construct(Chat $chat)
    {
        $this->chat = $chat;
    }

    /**
     * Get the channels the event should broadcast on.
     *
     * @return \Illuminate\Broadcasting\Channel|array
     */
    public function broadcastOn()
    {
        return new PrivateChannel('chats.' . $this->chat->to);
    }

    public function broadcastWith()
    {
        return ["message" => $this->chat];
    }
}

保存时我调用了这样的事件broadcast(new NewChatMessage($chat));

我的Stack如下,
OS: Windows 10
服务器:Apache2
数据库:MySql
缓存:Redis

我发现 Laravel 在 Redis 的 config/database.php 文件中有一个前缀选项配置。我在 Redis 的选项中评论了前缀。然后它开始工作了。

'redis' => [

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

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

        'default' => [
            'url' => env('REDIS_URL'),
            'host' => env('REDIS_HOST', '127.0.0.1'),
            'password' => env('REDIS_PASSWORD', null),
            'port' => env('REDIS_PORT', '6379'),
            'database' => env('REDIS_DB', '0'),
        ],

        'cache' => [
            'url' => env('REDIS_URL'),
            'host' => env('REDIS_HOST', '127.0.0.1'),
            'password' => env('REDIS_PASSWORD', null),
            'port' => env('REDIS_PORT', '6379'),
            'database' => env('REDIS_CACHE_DB', '1'),
        ],

    ],

这可能对以后的某个人有所帮助。