websocket实现简易私聊
<template>
<div>
<div class="user-list">
<div
v-for="user in userList"
:key="user.id"
@click="openPrivateChat(user)"
:class="{ active: activeUser && activeUser.id === user.id }"
>
{{ user.username }}
</div>
<div
>
{{ this.urname }}
</div>
</div>
<div v-if="activeUser" class="messages">
<div v-for="message in activeUserMessages" :key="message.id">
<strong>{{ message.sender }}:</strong> {{ message.text }}
</div>
<div v-for="message in sendUserMessages" :key="message.id">
<strong>{{ message.sender }}:</strong> {{ message.text }}
</div>
</div>
<input v-model="inputMessage" @keyup.enter="sendMessage" :disabled="!activeUser" placeholder="Type your message">
</div>
</template>
<script>
export default {
data() {
return {
ws: null,
inputMessage: "",
userList: [],
activeUser: null,
userMessages: {} ,
urname:''
};
},
created() {
this.connectWebSocket();
var user ={"username":"user02","id":1};
var user2 ={"username":"user03","id":2};
var user3 ={"username":"user04","id":3};
var user4 ={"username":"user05","id":4};
var user5 ={"username":"user06","id":5};
this.userList.push(user);
this.userList.push(user2);
this.userList.push(user3);
this.userList.push(user4);
this.userList.push(user5);
},
computed: {
activeUserMessages() {
return this.userMessages[this.activeUser.username] || [];
},
sendUserMessages(){
return this.userMessages[this.urname] || [];
},
},
methods: {
connectWebSocket() {
this.ws = new WebSocket("ws://localhost:2009/api/v1/ws");
this.ws.onmessage = event => {
const message = JSON.parse(event.data);
if (message.private) {
this.handlePrivateMessage(message);
}
};
},
sendMessage() {
if (this.activeUser) {
var username=localStorage.getItem("userName");
this.urname=username;
const message = {
sender: username,
text: this.inputMessage,
private: true,
recipient: this.activeUser.id
};
this.ws.send(JSON.stringify(message));
this.inputMessage = "";
console.log("======"+this.activeUser.id)
}
},
openPrivateChat(user) {
this.activeUser = user;
},
handlePrivateMessage(message) {
console.log(this.userMessages[message.sender])
if (this.userMessages[message.sender]) {
this.userMessages[message.sender].push(message);
console.log("111111=="+[...this.userMessages[message.sender]])
} else {
this.userMessages[message.sender] = [message];
}
}
}
};
</script>
websocket实现简易群聊
<template>
<div>
<div class="messages">
<div v-for="message in messages" :key="message.id">
<strong>{{ message.sender }}:</strong> {{ message.text }}
</div>
</div>
<input v-model="inputMessage" @keyup.enter="sendMessage" placeholder="Type your message">
</div>
</template>
<script>
export default {
data() {
return {
ws: null,
messages: [],
inputMessage: ""
};
},
created() {
this.connectWebSocket();
},
methods: {
connectWebSocket() {
this.ws = new WebSocket("ws://localhost:2009/api/v1/ws");
this.ws.onmessage = event => {
const message = JSON.parse(event.data);
this.messages.push(message);
};
},
sendMessage() {
var username=localStorage.getItem("userName");
const message = {
sender: username,
text: this.inputMessage
};
this.ws.send(JSON.stringify(message));
this.inputMessage = "";
}
}
};
</script>