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

Vue+express+Socket實(shí)現(xiàn)聊天功能

 更新時(shí)間:2021年06月28日 17:23:54   作者:零度°K  
這篇文章主要為大家詳細(xì)介紹了Vue+express+Socket實(shí)現(xiàn)聊天功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了Vue+express+Socket實(shí)現(xiàn)聊天功能的具體代碼,供大家參考,具體內(nèi)容如下

實(shí)現(xiàn)聊天功能

具體功能

只是為了實(shí)現(xiàn)功能,不對(duì)界面進(jìn)行美化

1、輸入消息點(diǎn)擊發(fā)送所有用戶可以在下方收到消息

2、輸入userid后點(diǎn)擊連接,可以連接對(duì)應(yīng)的聊天,另外一個(gè)界面輸入剛剛那個(gè)頁面的userid后再輸入內(nèi)容點(diǎn)擊發(fā)送給指定的人,則剛才那個(gè)頁面可以打印輸出,而其他頁面不會(huì)收到,實(shí)現(xiàn)私聊的功能

3、沒有具體實(shí)現(xiàn)私聊的內(nèi)容顯示,但是接收發(fā)送消息都可以實(shí)現(xiàn),要實(shí)現(xiàn)私聊的內(nèi)容顯示可以再添加一個(gè)私聊頁面

界面截圖

項(xiàng)目準(zhǔn)備

只對(duì)socket準(zhǔn)備進(jìn)行介紹,Vue和express的搭建不進(jìn)行介紹

前端 socket

安裝

npm i vue-socket.io --save

導(dǎo)入

import VueSocketIO from 'vue-socket.io'

后臺(tái)socket

安裝

npm i socket.io --save

導(dǎo)入

在express-generator生產(chǎn)的bin/www文件夾中加入

var io = require('socket.io')(server)'
io.on('connection',  (socket) => {
  socket.on('demining',  (data) => {
    console.log(data);
  });
});

具體截圖如下:

項(xiàng)目實(shí)現(xiàn)

Vue代碼

HTMl代碼

<div class="home">
    userid: <input type="text" v-model="userid">
    昵稱:<input type="text" v-model="name">
    消息:<input type="text" v-model="msg" />
    <button @click="send">發(fā)送</button>
    <button @click="join">連接</button>
    <button @click="sendmsg">發(fā)送給指定的人</button>

    <ul>
      <li v-for="(item,index) in chatList" :key="item.name + index">
        {{ item.name }}說:{{ item.msg }}
      </li>
    </ul>
</div>

js代碼

export default {
  name: "Home",
  data() {
    return {
      users: [],
      msg: "",
      chatList: [],
      name: '',
      userid: ''
    };
  },
  sockets: {
    // 連接后臺(tái)socket
    connect() {
      console.log('socket connected');
    },
    // 用戶后臺(tái)調(diào)用,添加數(shù)據(jù)
    sendMessage(data) {
      console.log(data);
      this.chatList.push(data)
    },
    // 用戶后臺(tái)調(diào)用,打印數(shù)據(jù)
    receivemsg(data) {
      console.log('receivemsg');
      console.log(data);
    }
  },
  methods: {
    // 發(fā)送消息給后臺(tái)
    send() {
      // 使用emit調(diào)用后臺(tái)的socket中的message方法
      this.$socket.emit("message", {
        userid: 100,
        name: this.name,
        msg: this.msg
      });
    },
    // 建立用戶連接
    join() {
      this.$socket.emit("join", {
        userid: this.userid
      });
    },
    // 發(fā)送消息給后臺(tái) 用于私發(fā)消息
    sendmsg() {
      this.$socket.emit("sendmsg", {
        userid: this.userid,
        msg: this.msg
      });
    }
  }
};

express代碼

在剛才的www文件定義的連接中添加一下代碼

// 用于存儲(chǔ)每個(gè)用戶的socket,實(shí)現(xiàn)私聊的功能
let arrAllSocket = {}
// 穿件socket連接
io.on('connection', (socket) => {
  console.log('連接上了');
  // console.log(socket);
  // join函數(shù) 用于用戶連接
  socket.on('join', function (obj) {
    console.log(obj.userid + 'join')
    // 保存每個(gè)用戶的連接狀態(tài) 用于私發(fā)消息
    arrAllSocket[obj.userid] = socket
  })
  // 接收前臺(tái)發(fā)送的消息 函數(shù)名為message
  socket.on('message', (data) => {
    console.log(data);
    // 將消息發(fā)送回前臺(tái)(調(diào)用前臺(tái)定義的方法) 函數(shù)名為sendMessage
    io.emit('sendMessage', data);
  });
  // 私發(fā)消息
  socket.on('sendmsg', function (data) {
    console.log(data);
    // 查詢用戶連接
    let target = arrAllSocket[data.userid]
    if (target) {
      //發(fā)送信息至指定的人
      target.emit('receivemsg', data)
    }
  })
})

后臺(tái)代碼封裝

由于www文件不應(yīng)該寫太多代碼,所以對(duì)這一部分代碼進(jìn)行封裝

1、在項(xiàng)目目錄下創(chuàng)建一個(gè)io的文件夾,結(jié)構(gòu)如下

2、將剛才的那部分代碼移入io/index.js中

代碼如下

// 將server作為參數(shù)傳入
module.exports = function (server) {
  var io = require('socket.io')(server);
// 用于存儲(chǔ)每個(gè)用戶的socket,實(shí)現(xiàn)私聊的功能
  let arrAllSocket = {}
// 穿件socket連接
  io.on('connection', (socket) => {
    console.log('連接上了');
    // console.log(socket);
    // join函數(shù) 用于用戶連接
    socket.on('join', function (obj) {
      console.log(obj.userid + 'join')
      // 保存每個(gè)用戶的連接狀態(tài) 用于私發(fā)消息
      arrAllSocket[obj.userid] = socket
    })
    // 接收前臺(tái)發(fā)送的消息 函數(shù)名為message
    socket.on('message', (data) => {
      console.log(data);
      // 將消息發(fā)送回前臺(tái)(調(diào)用前臺(tái)定義的方法) 函數(shù)名為sendMessage
      io.emit('sendMessage', data);
    });
    // 私發(fā)消息
    socket.on('sendmsg', function (data) {
      console.log(data);
      // 查詢用戶連接
      let target = arrAllSocket[data.userid]
      if (target) {
        //發(fā)送信息至指定的人
        target.emit('receivemsg', data)
      }
    })
  })
}

最后在www文件中使用如下代碼,引入文件

var io = require('../io')
io(server)

至此,聊天的基本功能實(shí)現(xiàn)。記錄一下方便以后使用。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Vue父組件觸發(fā)子組件中的實(shí)現(xiàn)方法

    Vue父組件觸發(fā)子組件中的實(shí)現(xiàn)方法

    文章總結(jié):介紹了兩種實(shí)現(xiàn)父組件觸發(fā)子組件方法的常用方法:通過ref訪問子組件實(shí)例并調(diào)用方法,以及使用自定義事件觸發(fā)子組件方法
    2025-01-01
  • 詳解Vue依賴收集引發(fā)的問題

    詳解Vue依賴收集引發(fā)的問題

    這篇文章主要介紹了Vue依賴收集引發(fā)的問題,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • antd的select下拉框因?yàn)閿?shù)據(jù)量太大造成卡頓的解決方式

    antd的select下拉框因?yàn)閿?shù)據(jù)量太大造成卡頓的解決方式

    這篇文章主要介紹了antd的select下拉框因?yàn)閿?shù)據(jù)量太大造成卡頓的解決方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • Vue開發(fā)工具之vuejs-devtools安裝教程及常見問題解決(最詳細(xì))

    Vue開發(fā)工具之vuejs-devtools安裝教程及常見問題解決(最詳細(xì))

    這篇文章主要介紹了Vue開發(fā)工具vuejs-devtools超級(jí)詳細(xì)安裝教程以及常見問題解決本篇文章是最詳細(xì)的vue開發(fā)工具vuejs-devtools安裝教程,需要的朋友可以參考下
    2022-11-11
  • vue項(xiàng)目雙滑塊組件使用

    vue項(xiàng)目雙滑塊組件使用

    這篇文章主要介紹了vue項(xiàng)目雙滑塊組件使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • 基于vue-simplemde實(shí)現(xiàn)圖片拖拽、粘貼功能

    基于vue-simplemde實(shí)現(xiàn)圖片拖拽、粘貼功能

    這篇文章主要介紹了基于vue-simplemde實(shí)現(xiàn)圖片拖拽、粘貼功能,需要的朋友可以參考下
    2018-04-04
  • 深入詳解Vue3中的Mock數(shù)據(jù)模擬

    深入詳解Vue3中的Mock數(shù)據(jù)模擬

    這篇文章主要為大家介紹了深入Vue3中的Mock數(shù)據(jù)模擬實(shí)現(xiàn)細(xì)節(jié)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • vant如何修改placeholder樣式

    vant如何修改placeholder樣式

    這篇文章主要介紹了vant如何修改placeholder樣式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • vue3父子組件傳值?雙向綁定及注意問題小結(jié)

    vue3父子組件傳值?雙向綁定及注意問題小結(jié)

    這篇文章主要介紹了Vue3中如何通過v-model實(shí)現(xiàn)父子組件的雙向數(shù)據(jù)綁定及利用computed簡(jiǎn)化父子組件雙向綁定,本文結(jié)合示例代碼給大家講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-12-12
  • Vue腳手架的創(chuàng)建超詳解步驟

    Vue腳手架的創(chuàng)建超詳解步驟

    這篇文章主要給大家介紹了關(guān)于Vue腳手架創(chuàng)建的相關(guān)資料,Vue腳手架是vue官方提供的標(biāo)準(zhǔn)化開發(fā)工具(平臺(tái)),文中通過代碼以及圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2024-01-01

最新評(píng)論

巴林左旗| 宁蒗| 灵川县| 余江县| 紫云| 宁德市| 怀宁县| 蕲春县| 都匀市| 安多县| 石屏县| 丰顺县| 江安县| 南乐县| 丹江口市| 乌恰县| 栾川县| 沁阳市| 济源市| 大石桥市| 宁晋县| 绥阳县| 文成县| 哈密市| 从江县| 建始县| 五莲县| 寻乌县| 万山特区| 东海县| 永州市| 中西区| 隆子县| 赤壁市| 龙胜| 安丘市| 蓬安县| 天镇县| 南岸区| 桦甸市| 伊川县|