【问题标题】:Not able to get the response from Socket.io无法从 Socket.io 获得响应
【发布时间】:2020-12-11 14:44:35
【问题描述】:

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

文件: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));

我的堆栈如下,
操作系统:Windows 10
服务器:Apache2
数据库:MySql
缓存:Redis

【问题讨论】:

    标签: vue.js redis socket.io laravel-7


    【解决方案1】:

    我发现 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'),
            ],
    
        ],
    

    这可能对将来的某人有所帮助。

    【讨论】:

      猜你喜欢
      • 2020-08-25
      • 2021-07-18
      • 2018-02-20
      • 1970-01-01
      • 2016-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多