Vue+express+Socket实现聊天功能

 更新时间:2021年06月28日 17:23:54   作者:零度°K  
这篇文章主要为大家详细介绍了Vue+express+Socket实现聊天功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了Vue+express+Socket实现聊天功能的具体代码,供大家参考,具体内容如下

实现聊天功能

具体功能

只是为了实现功能,不对界面进行美化

1、输入消息点击发送所有用户可以在下方收到消息

2、输入userid后点击连接,可以连接对应的聊天,另外一个界面输入刚刚那个页面的userid后再输入内容点击发送给指定的人,则刚才那个页面可以打印输出,而其他页面不会收到,实现私聊的功能

3、没有具体实现私聊的内容显示,但是接收发送消息都可以实现,要实现私聊的内容显示可以再添加一个私聊页面

界面截图

项目准备

只对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代码

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>

js代码

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("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的文件夹,结构如下

2、将刚才的那部分代码移入io/index.js中

代码如下

// 将server作为参数传入
module.exports = function (server) {
  var io = require('socket.io')(server);
// 用于存储每个用户的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)

至此,聊天的基本功能实现。记录一下方便以后使用。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • vue封装一个右键菜单组件详解(复制粘贴即可使用)

    vue封装一个右键菜单组件详解(复制粘贴即可使用)

    关于vue项目中会出现一些需求,就是右键菜单项的功能实现,下面这篇文章主要给大家介绍了关于vue封装一个右键菜单组件(复制粘贴即可使用)的相关资料,需要的朋友可以参考下
    2022-12-12
  • 用Vue封装导航栏组件

    用Vue封装导航栏组件

    这篇文章主要为大家详细介绍了用Vue封装导航栏组件的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • vue如何在多个不同服务器下访问不同地址

    vue如何在多个不同服务器下访问不同地址

    这篇文章主要介绍了vue如何在多个不同服务器下访问不同地址,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-04-04
  • Vue-cli打包后部署到子目录下的路径问题说明

    Vue-cli打包后部署到子目录下的路径问题说明

    这篇文章主要介绍了Vue-cli打包后部署到子目录下的路径问题说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • vue中怎么区分不同的环境

    vue中怎么区分不同的环境

    这篇文章主要介绍了vue中怎么区分不同的环境,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-04-04
  • vue如何使用window.open打开页面并拼接参数

    vue如何使用window.open打开页面并拼接参数

    这篇文章主要介绍了vue如何使用window.open打开页面并拼接参数,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-09-09
  • vue获取后台json字符串方式

    vue获取后台json字符串方式

    这篇文章主要介绍了vue获取后台json字符串方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-04-04
  • vue打包后修改配置后端IP地址、端口等信息两种方法

    vue打包后修改配置后端IP地址、端口等信息两种方法

    这篇文章主要给大家介绍了关于vue打包后修改配置后端IP地址、端口等信息的两种方法,文中通过代码示例以及图文介绍的非常详细,对大家学习或者使用vue打包具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-09-09
  • vue中的config目录下index.js解读

    vue中的config目录下index.js解读

    这篇文章主要介绍了vue中的config目录下index.js解读,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • vue控制滚动条滑到某个位置的方法实例

    vue控制滚动条滑到某个位置的方法实例

    当容器有滚动条时,有时需要将滚动条滑到某个位置,下面这篇文章主要给大家介绍了关于vue控制滚动条滑到某个位置的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-12-12

最新评论