Vue+Nodejs使用WebSocket創(chuàng)建一個(gè)簡易聊天室教程
更新時(shí)間:2025年06月16日 09:13:02 作者:不想起名55
這篇文章主要介紹了Vue+Nodejs使用WebSocket創(chuàng)建一個(gè)簡易聊天室教程,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
一、頁面效果

二、架構(gòu)流程
使用vue編寫前端頁面,nodejs處理服務(wù)端消息,WebSocket進(jìn)行實(shí)時(shí)通信
三、技術(shù)細(xì)節(jié)
1.客戶端
<template>
<div>
<form onsubmit="return false">
<textarea id="responseTest" style="width: 500px; height: 300px" ></textarea>
<br />
<input type="text" name="message" style="width: 300px" :value="inputVal" @input="input" />
<input type="button" value="發(fā)送消息" @click="send(inputVal)" />
<input type="button" value="清空聊天記錄" @click="clean" />
</form>
</div>
</template>
<script>
export default {
data() {
return {
inputVal: '歡迎來到二二得四的聊天室',
socket:null
}
},
methods: {
testWebsocket() {
if (!window.WebSocket) {
window.WebSocket = window.MozWebSocket
}
if (window.WebSocket) {
this.socket = new WebSocket('ws://localhost:8088/ws')
this.socket.onmessage = function (event) {
var ta = document.getElementById('responseTest')
ta.value = ta.value + '\n' + event.data
}
this.socket.onopen = function (event) {
var ta = document.getElementById('responseTest')
ta.value = '連接開啟!'
}
this.socket.onclose = function (event) {
var ta = document.getElementById('responseTest')
ta.value = '連接關(guān)閉!'
}
} else {
alert('你的瀏覽器不支持WebSocket')
}
},
input(e) {
this.inputVal = e.detail.value
},
clean() {
document.getElementById('responseTest').value = ''
},
send(message) {
if (!window.WebSocket) {
return
}
if (this.socket.readyState === WebSocket.OPEN) {
this.socket.send(message)
} else {
alert('連接沒有開啟')
}
},
},
mounted() {
this.testWebsocket()
},
}
</script>
<style></style>
2. 服務(wù)端
使用的是nodejs
const ws = require('ws')
const webserve = new ws.Server({port:8088})
//打開WebSocket服務(wù)器:通過監(jiān)聽open事件打開服務(wù)器
webserve.on('open',function open() {
console.log('connected')
})
//關(guān)閉WebSocket服務(wù)器:通過監(jiān)聽close事件關(guān)閉服務(wù)器
webserve.on('close',function close() {
console.log('disconnected')
})
//監(jiān)聽連接:ws通過connection事件來監(jiān)聽連接
webserve.on('connection',function connection(res,req) {
const ip1 = req.headers['x-forwarded-for'] || req.socket.remoteAddress
const port1 = req.socket.remotePort
const clientName = ip1+port1
console.log('連接已開啟,開始發(fā)送消息')
// 發(fā)送數(shù)據(jù):ws通過send()方法來發(fā)送到客戶端數(shù)據(jù)
// res.send('welcome,'+clientName)
//接收數(shù)據(jù):ws通過message事件來接收數(shù)據(jù)。當(dāng)客戶端有消息發(fā)送給服務(wù)器時(shí),服務(wù)器就能夠觸發(fā)該消息
res.on('message',function incoming(message) {
console.log('received: %s from %s',message,clientName)
/**
* 準(zhǔn)備的狀態(tài):ws中WebSocket類具有以下4中準(zhǔn)備狀態(tài)
* 1、CONNCETION:值為0,表示連接還沒有打開
* 2、OPEN:值為1,表示連接已經(jīng)打開,可以通信了
* 3、CLOSING:值為2,表示連接正在關(guān)閉
* 4、CLOSED:值為2,表示連接已經(jīng)關(guān)閉
*/
webserve.clients.forEach(function each(client) {
if(client.readyState === ws.OPEN){
client.send(message.toString())
}
})
})
})
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
vue2 前后端分離項(xiàng)目ajax跨域session問題解決方法
本篇文章主要介紹了vue2 前后端分離項(xiàng)目ajax跨域session問題解決方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-04-04
vite構(gòu)建vue3項(xiàng)目的全過程記錄
vite是VUE3創(chuàng)建項(xiàng)目的工具,項(xiàng)目大了之后,性能明顯優(yōu)于webpack,下面這篇文章主要給大家介紹了關(guān)于vite構(gòu)建vue3項(xiàng)目的相關(guān)資料,需要的朋友可以參考下2023-01-01
vue引入js數(shù)字小鍵盤的實(shí)現(xiàn)代碼
這篇文章主要介紹了vue引入js數(shù)字小鍵盤的實(shí)現(xiàn)代碼,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2018-05-05
uni-app中vue3表單校驗(yàn)失敗的問題及解決方法
最近遇到這樣的問題在app中使用uni-forms表單,并添加校驗(yàn)規(guī)則,問題是即使輸入內(nèi)容,表單校驗(yàn)依然失敗,本文給大家分享uni-app中vue3表單校驗(yàn)失敗的問題及解決方法,感興趣的朋友一起看看吧2023-12-12
vue關(guān)于重置表單數(shù)據(jù)出現(xiàn)undefined的解決
這篇文章主要介紹了vue關(guān)于重置表單數(shù)據(jù)出現(xiàn)undefined的解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-09-09
vue watch自動(dòng)檢測數(shù)據(jù)變化實(shí)時(shí)渲染的方法
本篇文章主要介紹了vue watch自動(dòng)檢測數(shù)據(jù)變化實(shí)時(shí)渲染的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-01-01

