【发布时间】: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