最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue+Nodejs使用WebSocket創(chuàng)建一個簡易聊天室教程

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

一、頁面效果

二、架構(gòu)流程

使用vue編寫前端頁面,nodejs處理服務(wù)端消息,WebSocket進(jìn)行實時通信

三、技術(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ù)器時,服務(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é)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • vue2 前后端分離項目ajax跨域session問題解決方法

    vue2 前后端分離項目ajax跨域session問題解決方法

    本篇文章主要介紹了vue2 前后端分離項目ajax跨域session問題解決方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • Vue中使用和移除總線Bus的注意事項詳解

    Vue中使用和移除總線Bus的注意事項詳解

    Vue中的總線Bus是一種通信機(jī)制,可用于組件間的數(shù)據(jù)傳遞和事件觸發(fā)。使用時需要注意Bus的命名和定義、監(jiān)聽和觸發(fā)事件的方法、移除和銷毀Bus的時機(jī)和方式等問題。合理使用總線Bus可以提高組件的復(fù)用性和可維護(hù)性,但過度依賴可能會導(dǎo)致代碼耦合和難以維護(hù)
    2023-04-04
  • vite構(gòu)建vue3項目的全過程記錄

    vite構(gòu)建vue3項目的全過程記錄

    vite是VUE3創(chuàng)建項目的工具,項目大了之后,性能明顯優(yōu)于webpack,下面這篇文章主要給大家介紹了關(guān)于vite構(gòu)建vue3項目的相關(guān)資料,需要的朋友可以參考下
    2023-01-01
  • vue引入js數(shù)字小鍵盤的實現(xiàn)代碼

    vue引入js數(shù)字小鍵盤的實現(xiàn)代碼

    這篇文章主要介紹了vue引入js數(shù)字小鍵盤的實現(xiàn)代碼,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2018-05-05
  • uni-app中vue3表單校驗失敗的問題及解決方法

    uni-app中vue3表單校驗失敗的問題及解決方法

    最近遇到這樣的問題在app中使用uni-forms表單,并添加校驗規(guī)則,問題是即使輸入內(nèi)容,表單校驗依然失敗,本文給大家分享uni-app中vue3表單校驗失敗的問題及解決方法,感興趣的朋友一起看看吧
    2023-12-12
  • 基于Vue封裝實現(xiàn)全屏功能工具類

    基于Vue封裝實現(xiàn)全屏功能工具類

    在?Web?應(yīng)用程序中,有時需要為某些內(nèi)容提供全屏顯示的功能,本文將介紹如何使用?Vue.js?3?的?Composition?API?創(chuàng)建一個全屏功能的工具類,希望對大家有所幫助
    2024-03-03
  • Vue2.x與Vue3.x中路由鉤子的區(qū)別詳解

    Vue2.x與Vue3.x中路由鉤子的區(qū)別詳解

    這篇文章主要介紹了Vue2.x與Vue3.x中路由鉤子的區(qū)別,分別介紹了路由鉤子的分類,路由配置守衛(wèi)鉤子以及組件內(nèi)守衛(wèi)鉤子等有需要的朋友可以借鑒參考下
    2021-09-09
  • vue關(guān)于重置表單數(shù)據(jù)出現(xiàn)undefined的解決

    vue關(guān)于重置表單數(shù)據(jù)出現(xiàn)undefined的解決

    這篇文章主要介紹了vue關(guān)于重置表單數(shù)據(jù)出現(xiàn)undefined的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • Vuex 使用 v-model 配合 state的方法

    Vuex 使用 v-model 配合 state的方法

    這篇文章主要介紹了Vuex 使用 v-model 配合 state的方法,本文通過實例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-11-11
  • vue watch自動檢測數(shù)據(jù)變化實時渲染的方法

    vue watch自動檢測數(shù)據(jù)變化實時渲染的方法

    本篇文章主要介紹了vue watch自動檢測數(shù)據(jù)變化實時渲染的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01

最新評論

肃南| 云林县| 武平县| 云安县| 通江县| 德钦县| 文成县| 衡阳县| 张家界市| 镇原县| 龙游县| 历史| 祁门县| 延川县| 河间市| 通山县| 固安县| 宝坻区| 平泉县| 仙桃市| 蛟河市| 科技| 阜南县| 闻喜县| 金秀| 古交市| 即墨市| 绥滨县| 沅陵县| 金沙县| 永新县| 宿松县| 龙陵县| 望城县| 淮安市| 方城县| 漳州市| SHOW| 聊城市| 运城市| 临西县|