1. 程式人生 > 程式設計 >Vue+express+Socket實現聊天功能

Vue+express+Socket實現聊天功能

本文例項為大家分享了+express+Socket實現聊天功能的具體程式碼,供大家參考,具體內容如下

實現聊天功能

具體功能

只是為了實現功能,不對介面進行美化

1、輸入訊息點擊發送所有使用者可以在下方收到訊息

2、輸入userid後點擊連線,可以連線對應的聊天,另外一個介面輸入剛剛那個頁面的userid後再輸入內容點擊發送給指定的人,則剛才那個頁面可以列印輸出,而其他頁面不會收到,實現私聊的功能

3、沒有具體實現私聊的內容顯示,但是接收發送訊息都可以實現,要實現私聊的內容顯示可以再新增一個私聊頁面

介面截圖

Vue+express+Socket實現聊天功能

專案準備

只對socket準備進行介紹,Vue和express的搭建不進行介紹

前端 socket

安裝

npm i vue-socket.io --save

匯入

import VueSocketIO from 'vue-socket.io'

後臺socket

安裝

npm i socket.io --save

匯入

在express-generator生產的bin/www資料夾中加入

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

具體截圖如下:

Vue+express+Socket實現聊天功能

專案實現

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">傳送</button>
    <button @click="join">連線</button>
    <button @click="sendmsg">傳送給指定的人</button>

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

程式碼

export default {
  name: "Home",data() {
    return {
      users: [],msg: "",chatList: [],name: '',userid: ''
    };
  },sockets: {
    // 連線後臺socket
    connect() {
   客棧   console.log('socket connected');
    },// 使用者後臺呼叫,新增資料
    sendMessage(data) {
      console.log(data);
      this.chatList.push(data)
    },// 使用者後臺呼叫,列印資料
    receivemsg(data) {
      console.log('receivemsg');
      console.log(data);
    }
  },methods: {
    // 傳送訊息給後臺
    send() {
      // 使用emit呼叫後臺的socket中的message方法
      this.$socket.emit("message",{
        userid: 100,name: this.name,msg: this.msg
      });
    },// 建立使用者連線
    join() {
      this.$socket.emit("join",{
        userid: this.userid
      });
    },// 傳送訊息給後臺 用於私發訊息
    sendmsg() {
      this.$socket.emit(BgpMrxCj"sendmsg",{
        userid: this.userid,msg: this.msg
      });
    }
  }
};

express程式碼

在剛才的www檔案定義的連線中新增一下程式碼

// 用於儲存每個使用者的socket,實現私聊的功能
let arrAllSocket = {}
// 穿件socket連線
io.on('connection',(socket) => {
  console.log('連線上了');
  // console.log(socket);
  // join函式 用於使用者連線
  socket.on('join',function (obj) {
    console.log(obj.userid + 'join')
    // 儲存每個使用者的連線狀態 用於私發訊息
    arrAllSocket[obj.userid] = socket
  })
  // 接收前臺傳送的訊息 函式名為message
  socket.on('message',(data) => {
    console.log(data);
    // 將訊息傳送回前臺(呼叫前臺定義的方法) 函式名為sendMessage
    io.emit('sendMessage',data);
  });
  // 私發訊息
  socket.on('sendmsg',function (data) {
    console.log(data);
    // 查詢使用者連線
    let target = arrAllSocket[data.userid]
    if (target) {
      //傳送資訊至指定的人
      target.emit('receivemsg',data)
    }
  })
})

後臺程式碼封裝

由於www檔案不應該寫太多程式碼,所以對這一部分程式碼進行封裝

1、在專案目錄下建立一個io的資料夾,結構如下

Vue+express+Socket實現聊天功能

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

程式碼如下

// 將server作為引數傳入
module.exports = function (server) {
  var io = require('socket.io')(servwww.cppcns.comer);
// 用於儲存每個使用者的socket,實現私聊的功能
  let arrAllSocket = {}
// 穿件socket連線
  io.on('connection',(socket) => {
    console.log('連線上了');
    // console.log(socket);
    // join函式 用於使用者連線
    socket.on('join',function (obj) {
      console.log(obj.userid + 'join')
      // 儲存每個使用者的連線狀態 用於私發訊息
      arrAllSocket[obj.userid] = socket
    })
    // 接收前臺傳送的訊息 函式名為message
    socket.on('message',(data) => {
      console.log(data);
      // 將訊息傳送回前臺(呼叫前臺定義的方法) 函式名為sendMessage
      io.emit('sendMessage',data);
    });
    // 私發訊息
    socket.on('sendmsg',function (data) {
      console.log(data);
      // 查詢使用者連線
      let target = arrAllSocket[data.userid]
      if (target) {
        //傳送資訊至指定的人
        target.emit('receivemsg',data)
      }
    })
  })
}

最後在www檔案中使用如下程式碼,引入檔案

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

至此,聊天的基本功能實現。記錄一下方便以後使用。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。