玩转NODE.JS(四)-搭建简单的聊天室的代码

yizhihongxing

我们来详细讲解一下“玩转NODE.JS(四)-搭建简单的聊天室”的完整攻略。

准备工作

在开始之前,需要确认你已经具备以下条件:

  • 已经安装了 Node.js 环境。
  • 熟悉基本的 JavaScript 基础语法。
  • 熟悉 HTTP 协议及 WebSocket 协议。

创建项目文件夹

首先创建一个空的项目文件夹,可以在终端中使用 mkdir 命令来创建:

mkdir chatroom
cd chatroom

安装 Express 和 socket.io

在项目文件夹下执行以下命令安装 Expresssocket.io

npm install express socket.io --save

创建服务器

在项目文件夹下,新建一个 index.js 文件,并添加以下代码:

const express = require('express');
const app = express();
const server = app.listen(3000, () => {
  console.log('Server listening at port %d', server.address().port);
});
const io = require('socket.io')(server);

以上代码创建了一个 Express 服务器并监听在 3000 端口,同时也创建了一个 socket.io 服务器。

创建聊天室页面

在项目文件夹下,创建一个 public 文件夹,用来存放静态文件,比如样式、脚本等。在 public 文件夹下,创建一个 index.html 文件,并添加以下代码:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Chatroom</title>
</head>
<body>
  <h1>Chatroom</h1>
  <ul id="messages"></ul>
  <form id="form" action="">
    <input id="input" type="text" autocomplete="off">
    <button>Send</button>
  </form>

  <script src="/socket.io/socket.io.js"></script>
  <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
  <script>
  $(function () {
    var socket = io();
    var form = $('form');
    var input = $('#input');
    var messages = $('#messages');

    form.submit(function (e) {
      e.preventDefault();
      if (input.val()) {
        socket.emit('chat message', input.val());
        input.val('');
      }
    });

    socket.on('chat message', function (msg) {
      messages.append($('<li>').text(msg));
    });

  });
  </script>
</body>
</html>

以上代码创建了一个基本的聊天室页面,其中包含一个文本输入框和一个发送按钮,以及一个消息列表。在这个页面中,我们使用了 jQuery 和 socket.io.js 库来实现消息的发送和接收。

修改服务器代码

在服务器代码中添加以下代码,用于返回静态文件:

app.use(express.static('public'));

同时,修改创建 socket.io 服务器的代码,加入以下代码:

io.on('connection', (socket) => {
  console.log('a user connected');
  socket.on('disconnect', () => {
    console.log('user disconnected');
  });
  socket.on('chat message', (msg) => {
    io.emit('chat message', msg);
  });
});

以上代码监听了 connection 事件,并在用户连接和断开时输出了相关的信息。同时,监听了 chat message 事件,并将接收到的消息广播给所有的用户。

启动服务器

在终端中执行以下命令启动服务器:

node index.js

然后在浏览器中打开 http://localhost:3000,即可进入聊天室页面,可以在文本框中输入消息并发送,界面上会显示出所有的消息。

示例说明

  1. 如果需要在聊天室中增加新的功能,比如私聊、发送图片等,需要如何修改服务器端代码和客户端代码?
    答:对于私聊功能,可以在客户端发送私聊消息时,在消息中附带上对方用户的 ID,服务器在接收到这样的消息后,会将消息路由到指定的用户;对于发送图片等功能,需要在客户端中使用 FileReader API 将图片转换为二进制流,并使用 socket.ioemit() 方法将二进制流发送到服务器,服务器在接收到图片后,可以存储到服务器上或者转发到其他用户的客户端进行展示。

  2. 如何优化聊天室的性能,防止出现消息堆积、延迟等问题?
    答:可以考虑引入消息队列,对消息进行异步处理,避免出现延迟的情况;同时,在客户端和服务器端都可以对消息进行分页处理,每次加载只返回部分消息,以减轻数据传输的压力;另外,可以使用一些缓存技术,例如将一些消息缓存在内存中,加速读取和推送的速度。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:玩转NODE.JS(四)-搭建简单的聊天室的代码 - Python技术站

(0)
上一篇 2023年6月8日
下一篇 2023年6月8日

相关文章

  • Node.js原理阻塞和EventEmitter及其继承的运用实战

    Node.js是一种基于事件驱动、非阻塞I/O模型的服务器端JavaScript运行环境。在Node.js中,有两个重要的概念:阻塞和EventEmitter。本文将从这两个方面入手,分别介绍其原理和应用实践。 阻塞原理 Node.js是一种单线程的事件驱动、非阻塞I/O模型的运行环境。在Node.js中,由于单线程的特性,一旦发生阻塞,则整个进程会停止响应…

    node js 2023年6月8日
    00
  • 借助node实战JSONP跨域实例

    下面是“借助node实战JSONP跨域实例”的完整攻略。 简介 在前后端分离的开发模式下,比较常见的一种跨域方案是JSONP。JSONP的原理是通过动态创建一个script标签,让浏览器去请求一个跨域的资源,因为script标签的src属性能够跨域请求资源,服务器端就可以将需要返回的数据放在一段回调函数中返回,浏览器解析这段数据并执行回调函数,从而达到跨域的…

    node js 2023年6月8日
    00
  • 前端面试运行npm run xxx发生过程原理解析

    当在前端面试中被问到“运行npm run xxx的过程原理”时,我们可以从以下三个方面进行详细讲解: 1. npm是什么,npm run xxx是什么 npm 全称为 Node Package Manager,是Node.js官方提供的包管理器,用于管理前端集成开发环境和第三方包。 npm run xxx 是用于在当前项目的终端中运行命令 xxx,其中 xx…

    node js 2023年6月8日
    00
  • 三步教你完成切换nodejs版本

    以下是“三步教你完成切换nodejs版本”的完整攻略: 1.安装nvm nvm全称Node Version Manager,可以方便地切换nodejs的版本。官网链接:https://github.com/nvm-sh/nvm。 在命令行终端执行以下命令安装: curl -o- https://raw.githubusercontent.com/nvm-sh…

    node js 2023年6月8日
    00
  • 详解基于Node.js的HTTP/2 Server实践

    详解基于Node.js的HTTP/2 Server实践 前言 HTTP/2是浏览器最新的协议,比HTTP/1.1更快、更高效。Node.js天然支持HTTP/2协议,并且使用起来也非常容易。本文将讲解如何使用Node.js创建基于HTTP/2协议的服务器。 实现步骤 创建Node.js项目:首先,需要创建一个新的Node.js项目。在终端进入到你创建项目的路…

    node js 2023年6月8日
    00
  • 基于jenkins实现发布node.js项目

    下面是基于Jenkins实现发布Node.js项目的完整攻略。 步骤一:安装Jenkins 首先,在你的服务器上安装Jenkins。安装方法可参考官方文档 https://jenkins.io/zh/doc/book/installing/。 步骤二:安装Node.js插件 Jenkins需要运行Node.js应用程序所需的环境,所以需要安装Node.js插…

    node js 2023年6月8日
    00
  • node.js中fs\path\http模块的使用方法详解

    下面我来详细讲解一下 “node.js中fs\path\http模块的使用方法详解”。 1. node.js中fs模块的使用方法 在node.js中,可以通过fs模块来操作文件系统,常用的方法有读取文件、写入文件、创建文件夹等等。 1.1 读取文件 使用fs模块中的fs.readFile()方法来读取文件内容。该方法有两个参数,第一个参数是要读取的文件路径,…

    node js 2023年6月8日
    00
  • express框架实现基于Websocket建立的简易聊天室

    下面我将为你详细讲解如何使用express框架实现基于Websocket建立的简易聊天室。 一、准备工作 在开始实现之前,我们需要准备好以下内容:- Node.js环境- 一个基础的express web应用- WebSocket库socket.io 如果你还没有安装Node.js,请先安装好。安装完成后,在控制台中输入以下命令来安装express和sock…

    node js 2023年6月8日
    00
合作推广
合作推广
分享本页
返回顶部