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

下面我来详细讲解“基于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-cli脚手架-bulid下的配置文件

    当使用 Vue.js 开发项目时,经常会使用到 Vue CLI 脚手架工具来初始化项目,并在 build 时自动生成配置文件来进行编译、打包等操作。以下是 Vue CLI 脚手架中 bulid 下的配置文件的详细解析: 1. 配置文件的作用 Vue CLI 脚手架的 build 目录下存放的是一些 webpack 的配置文件,这些配置文件主要用于在生产环境下…

    Vue 2023年5月28日
    00
  • Vite引入虚拟文件的实现

    Vite 是一个现代化的前端构建工具,其最大的特点是快速的冷启动速度。其中一个实现方式是通过 “虚拟文件” 实现的。 什么是虚拟文件 在 Vite 中,虚拟文件是指一些文件在磁盘上并不存在,但在构建过程中,它们被用作常规的原始文件来进行依赖分析和构建过程。这样,在构建项目前,已经打包的文件在一个 Map 结构的内存中进行了缓存,减少了构建时不必要的时间消耗。…

    Vue 2023年5月28日
    00
  • VUEJS实战之构建基础并渲染出列表(1)

    “VUEJS实战之构建基础并渲染出列表(1)”是一个Vue.js实战教程,主要讲解如何使用Vue.js构建基础并渲染出列表。下面是该教程的完整攻略: 一、环境搭建 首先,我们需要在本地搭建Vue.js的开发环境。具体步骤如下: 安装Node.js和npm; 使用npm安装Vue.js:npm install vue; 在HTML文件中引入Vue.js:&lt…

    Vue 2023年5月27日
    00
  • 实例分析vue循环列表动态数据的处理方法

    下面我就给你详细讲解“实例分析Vue循环列表动态数据的处理方法”的完整攻略。 一、问题描述 当我们需要循环列表显示数据时,如果数据是动态的,我们该怎么处理呢?比如,我们要在页面中展示一些文章列表,这些文章在不停地更新,我们需要实现哪些功能呢? 实时获取最新列表数据并展示出来 定时更新列表数据,以保证数据的及时性 点击某篇文章,能够跳转到对应的文章详情页面 二…

    Vue 2023年5月29日
    00
  • 详解Vue如何自定义hooks(组合式)函数

    我很乐意为您详细讲解如何自定义Vue的组合式(Hooks)函数。 什么是Vue的组合式(Hooks)函数? Vue的组合式函数,也称为Hooks,是一种类似于React Hooks的编程模式,可以在Vue组件中复用逻辑,并且不需要使用mixin和继承。当我们需要在多个组件之间共享逻辑时,可以使用Hooks来进行抽象,并将其作为可复用的函数进行重用。 当我们使…

    Vue 2023年5月28日
    00
  • vue 实现手动分割日期

    下面我将为您提供完整的攻略,让您能够使用 Vue 实现手动分割日期。 1.准备工作 在开始实现之前,需要先准备好相应的开发环境。Vue 项目通常会使用 Vue CLI 进行快速构建和管理。如果您尚未配置好 Vue 开发环境,请先安装 npm 和 Vue CLI,然后创建一个新项目。 # 安装 Vue CLI npm install -g vue-cli # …

    Vue 2023年5月29日
    00
  • Vue使用video标签实现视频播放

    下面我将详细讲解“Vue使用video标签实现视频播放”的完整攻略。 概述 想要在 Vue 中使用 video 标签实现视频播放,需要用到 Vue 的指令和事件等相关知识,以下是实现过程的具体步骤。 步骤 1. 安装和引入 video.js video.js 是一个现代化的视频播放器,它可以帮助我们轻松地实现视频播放功能。我们需要安装它并在 Vue 中引入:…

    Vue 2023年5月28日
    00
  • 一文详解React Redux使用方法

    一文详解React Redux使用方法 前言 React是当前最流行的前端框架之一,Redux则是其中最常用的状态管理工具之一。在使用React进行开发时,借助Redux能够有效地管理组件之间的状态,并使得代码更加清晰、易于维护。 本文将详细讲解React Redux的使用方法,包括如何搭建项目、如何定义Action、Reducer和Store,以及如何编写…

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