基于node+vue实现简单的WebSocket聊天功能

yizhihongxing

下面我来详细讲解“基于node+vue实现简单的WebSocket聊天功能”的完整攻略。

前置知识

在开始之前,需要了解一些基础知识:

  • WebSocket:是一种基于 TCP 协议的新型网络协议,可以实现双向通信。

  • Node.js:一个基于Chrome V8引擎的JavaScript运行环境。

  • Vue.js:一个构建用户界面的渐进式框架。

  • npm:Node.js包管理工具,提供给开发者方便的包安装、更新和分享等功能。

实现步骤

  1. 初始化项目

在命令行中执行以下命令:

mkdir chatroom
cd chatroom
npm init -y
  1. 安装依赖

执行以下命令安装 express、socket.io 和 nodemon:

npm install express socket.io nodemon --save-dev
  1. 创建服务器

创建 index.js 并编写以下代码:

const express = require('express');
const http = require('http');
const socketIO = require('socket.io');
const path = require('path');

const app = express();
const server = http.Server(app);
const io = socketIO(server);

const port = process.env.PORT || 8080;

app.use(express.static(path.join(__dirname, 'public')));

io.on('connection', (socket) => {
  console.log('A client has connected: ' + socket.id);

  socket.on('chat message', (msg) => {
    io.emit('chat message', msg);
  });

  socket.on('disconnect', () => {
    console.log('A client has disconnected: ' + socket.id);
  });
});

server.listen(port, () => {
  console.log(`Server is listening on port ${port}`);
});
  1. 创建 Vue.js 客户端

在根目录下创建 public 文件夹,在其中创建 index.htmlindex.js

其中,index.html 的内容如下:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Chatroom</title>
  </head>
  <body>
    <ul id="messages"></ul>
    <form id="message-form">
      <input id="message-input" autocomplete="off">
      <button>Send</button>
    </form>
    <script src="/socket.io/socket.io.js"></script>
    <script src="/index.js"></script>
  </body>
</html>

index.js 的内容如下:

const socket = io();

const messageForm = document.querySelector('#message-form');
const messageInput = document.querySelector('#message-input');
const messages = document.querySelector('#messages');

messageForm.addEventListener('submit', (e) => {
  e.preventDefault();
  socket.emit('chat message', messageInput.value);
  messageInput.value = '';
});

socket.on('chat message', (msg) => {
  const li = document.createElement('li');
  li.textContent = msg;
  messages.appendChild(li);
});
  1. 运行项目

在命令行中执行以下命令:

npm run dev

在浏览器中打开 http://localhost:8080,即可使用聊天功能。

示例说明

示例1:实现聊天室

在上述代码的基础上,可以通过添加用户列表来实现聊天室功能,即在客户端中创建一个用户列表,可以显示当前在线的用户。

在服务器端中增加以下代码:

let users = [];

io.on('connection', (socket) => {
  console.log('A client has connected: ' + socket.id);

  socket.on('new user', (username) => {
    socket.username = username;
    users.push(username);
    io.emit('new user', users);
  });

  socket.on('chat message', (msg) => {
    io.emit('chat message', {message: msg, username: socket.username});
  });

  socket.on('disconnect', () => {
    console.log('A client has disconnected: ' + socket.id);
    const index = users.indexOf(socket.username);
    users.splice(index, 1);
    io.emit('user disconnected', users);
  });
});

在客户端中增加以下代码:

const userList = document.querySelector('#user-list');

socket.on('new user', (users) => {
  while (userList.firstChild) {
    userList.removeChild(userList.lastChild);
  }
  users.forEach((user) => {
    const li = document.createElement('li');
    li.textContent = user;
    userList.appendChild(li);
  });
});

socket.on('user disconnected', (users) => {
  while (userList.firstChild) {
    userList.removeChild(userList.lastChild);
  }
  users.forEach((user) => {
    const li = document.createElement('li');
    li.textContent = user;
    userList.appendChild(li);
  });
});

其中,index.html 中需要添加以下内容:

<ul id="user-list"></ul>

示例2:添加聊天记录

在客户端中增加以下代码:

socket.on('chat message', ({message, username}) => {
  const li = document.createElement('li');
  li.textContent = `${username}: ${message}`;
  messages.appendChild(li);
});

其中,${username}: ${message} 可以任意修改。

在客户端中增加以下样式:

li {
  font-size: 14px;
  line-height: 20px;
  margin: 10px;
  list-style: none;
}

li:nth-child(odd) {
  background-color: #f2f2f2;
}

这样就可以实现聊天记录功能了。

总结

以上就是实现基于 Node.js 和 Vue.js 的 WebSocket 聊天功能的详细步骤和示例说明。需要注意的是,在实际项目中还需要考虑安全性、优化性能等方面的问题。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:基于node+vue实现简单的WebSocket聊天功能 - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • vue-router路由懒加载及实现的3种方式

    接下来我会针对“vue-router路由懒加载及实现的3种方式”进行详细讲解。整个过程分为以下几个步骤: 路由懒加载是什么? 路由懒加载是指延迟加载路由组件,当组件被访问时才会加载该组件,而不是一次性加载所有组件。 为什么要使用路由懒加载? 使用路由懒加载可以提升页面的加载速度,特别是在项目较大、组件较多的情况下,可以大幅减少首屏加载时间,提升用户体验。 实…

    Vue 2023年5月28日
    00
  • VueJs 搭建Axios接口请求工具

    VueJs 搭建 Axios 接口请求工具可以分为以下几个步骤: 1. 安装 Axios 首先,在 VueJs 中使用 Axios 需要先安装 Axios 库。可以使用 npm 命令进行安装(前提是已经安装了 npm): npm install axios 2. 创建请求服务 可以在 Vue 项目中新建一个 services 文件夹,在其中创建 api.js…

    Vue 2023年5月28日
    00
  • Vue过滤器,生命周期函数和vue-resource简单介绍

    一、Vue过滤器 Vue过滤器是对要显示的数据进行加工处理后再呈现给用户的功能。它通过在插值表达式中使用管道字符“|”来实现,如下面的示例: <p>{{ message | capitalize }}</p> 在上述示例中,“capitalize”是一个自定义的过滤器名称,它会将message的值转化为所有单词首字母大写的形式。定义这…

    Vue 2023年5月28日
    00
  • Vue命令行工具Vue-CLI图文详解(推荐!)

    Vue命令行工具Vue-CLI图文详解 介绍 Vue CLI 是 Vue.js 官方提供的一个现代化的项目脚手架,它可以帮助我们快速生成一个新的 Vue 项目,并且提供了开箱即用的 Babel、ESLint、Webpack 等插件配置。 在使用 Vue CLI 之前,需要先安装 Node.js 和 npm。安装完成之后,可以使用以下命令安装 Vue CLI:…

    Vue 2023年5月27日
    00
  • 浅谈Vue 函数式组件的使用技巧

    下面我们就来详细讲解一下“浅谈Vue 函数式组件的使用技巧”的完整攻略。 什么是Vue函数式组件 在Vue中,组件代表着一个独立的模块,它可以被包含在页面中的任何地方,并可以重复使用。Vue中的组件有两种类型:状态组件和函数式组件。函数式组件是一种无状态组件,它不会保留状态,只会根据传入的props渲染其内容,通常用于列表、表格等无需维护复杂状态的组件中。在…

    Vue 2023年5月28日
    00
  • 在vue中对数组值变化的监听与重新响应渲染操作

    在Vue中监听和重新响应渲染数组的变化操作主要是通过Vue提供的Array原型方法进行实现,下面是详细步骤: 步骤一:在vue组件中定义数组 在Vue的组件中,需要先定义要监听的数组,可以在data()中定义一个数组类型的变量,例如: data() { return { list: ["apple", "banana"…

    Vue 2023年5月28日
    00
  • Vue项目中数据的深度监听或对象属性的监听实例

    在Vue项目中,如果需要监听数据的变化,可以使用Vue提供的语法糖——$watch来实现。$watch支持监听某个具体的数据对象以及数据对象中的属性。 监听某个具体的数据对象 监听某个具体的数据对象可以通过在Vue实例中使用$watch方法来实现。下面是一个示例: // 假设我们有一个Vue实例,并且其中有一个name属性 var vm = new Vue(…

    Vue 2023年5月28日
    00
  • vue-cli3添加模式配置多环境变量的方法

    介绍:vue-cli 3 是 Vue 官方提供的脚手架工具,使用 vue-cli3 可以快速搭建 Vue 项目,添加模式配置多环境变量,常用于项目的部署环境切换、前后端资源访问地址等的切换。本篇攻略介绍 vue-cli3 添加模式配置多环境变量的方法,包括两种示例说明。 准备工作 在使用 vue-cli3 添加模式配置多环境变量之前我们需要准备以下环境和工具…

    Vue 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部