在web應用程序中,websocket協議是實時通信的一種重要方式。使用websocket技術可以實現實時通信,例如聊天室。在Vue中,使用websocket技術實現私聊也是一種非常實用的功能。
要實現Vue中的websocket私聊,首先需要使用Vue CLI創建一個新項目。
$ vue create vue-websocket-chat
使用CLI創建項目后,我們需要安裝vue-socket.io和socket.io-client來實現客戶端和服務端之間的通信。
$ npm install vue-socket.io socket.io-client --save
接下來,在main.js文件中導入創建Vue實例的代碼,并啟用websocket連接。
import Vue from 'vue'
import App from './App.vue'
import VueSocketIO from 'vue-socket.io'
import socketio from 'socket.io-client'
const socket = socketio('http://localhost:3000')
Vue.use(new VueSocketIO({
debug: true,
connection: socket
}))
new Vue({
render: h =>h(App),
}).$mount('#app')
接著,在App.vue文件中實現私聊的功能。我們可以在App.vue文件中創建一個input框,使用戶可以輸入私聊消息。我們還可以使用socket.emit方法向服務端發送私聊消息。服務端收到私聊消息后,通過socket.on方法向目標用戶發送私聊消息。最后,我們需要將私聊消息展示在界面上。
<template><div><div v-for="(msg, index) in messages" :key="index">{{ msg }}
</div><input v-model="privateChatMessage"/><button @click="sendPrivateMessage">Send</button></div></template><script>export default {
data() {
return {
messages: [],
privateChatMessage: ''
}
},
methods: {
sendPrivateMessage() {
const username = prompt('請輸入目標用戶的用戶名')
const message = this.privateChatMessage
this.$socket.emit('private message', {
username,
message
})
this.privateChatMessage = ''
}
},
sockets: {
privateMessage(data) {
this.messages.push(data)
}
}
}
</script>
最后,我們在服務端中實現私聊功能。服務端監聽客戶端發送的私聊消息,再向目標用戶發送私聊消息。
io.on('connection', (socket) =>{
socket.on('private message', (data) =>{
const targetSocket = getClientByUsername(data.username)
if (targetSocket) {
targetSocket.emit('private message', data.message)
} else {
socket.emit('error', '目標用戶不存在')
}
})
})
在getClientByUsername方法中,我們需要根據用戶名查找目標用戶所對應的socket對象,然后再向該對象發送私聊消息。
const getClientByUsername = (username) =>{
const clients = io.sockets.clients().connected
for (let socketId in clients) {
if (clients[socketId].username === username) {
return clients[socketId]
}
}
return null
}
以上就是Vue中使用websocket實現私聊的完整流程。