Node.js用Socket.IO做聊天软件的实现示例

下面是针对“Node.js用Socket.IO做聊天软件的实现示例”的完整攻略:

简介

Socket.IO 是一个实时应用程序框架,它允许任意传输底层通信机制,同时向应用程序层提供了良好的抽象。该框架可广泛应用于实时应用程序(例如实时聊天,协作编辑等)。

如何在 Node.js 中使用 Socket.IO 实现聊天室?

步骤

以下是使用 Socket.IO 创建聊天应用程序的简要步骤。

  1. 安装 Node.js 和 NPM。

  2. 创建项目目录,并通过 npm 初始化命令它:

    bash
    mkdir socket-io-chat
    cd socket-io-chat
    npm init

  3. 安装 socket.io 和 express 包:

    bash
    npm install --save socket.io express

  4. 编写 server.js 文件,用于启动服务器和建立 Socket.IO 连接:

    ``` javascript
    const express = require('express');
    const app = express();
    const http = require('http');
    const server = http.createServer(app);
    const io = require('socket.io')(server);

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

    server.listen(port, () => {
    console.log(Server listening on port ${port});
    });

    app.use(express.static(__dirname + '/public'));

    io.on('connection', (socket) => {
    console.log('User connected');
    socket.on('disconnect', () => {
    console.log('User disconnected');
    });
    });
    ```

    这个文件完成了以下操作:

    • 创建 express 应用程序和 HTTP 服务器。
    • 使用 Socket.IO 初始化此服务器。
    • 将静态公共路径设置为 public 目录。
    • 监听连接事件,当用户连接到 Socket.IO 时执行。
  5. 在 public 目录下创建 index.html 文件,创建聊天应用程序的前端:

    html
    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    <title>Socket.IO Chat App</title>
    </head>
    <body>
    <ul id="messages"></ul>
    <form action="">
    <input id="message" autocomplete="off" /><button>Send</button>
    </form>
    <script src="https://cdn.socket.io/socket.io-1.2.0.js"></script>
    <script src="/socket.io/socket.io.js"></script>
    <script src="main.js"></script>
    </body>
    </html>

    这个文件包含了以下要素:

    • 表单:Input 和提交按钮,用于发送消息。
    • 无序列表:用于呈现消息。
    • 脚本链接:用于在前端中加载 Socket.IO 库和主 JavaScript 文件。
  6. 在 public 目录下创建 main.js 文件,建立与 Socket.IO 的连接:

    ``` javascript
    const socket = io();
    const messages = document.getElementById('messages');
    const form = document.querySelector('form');
    const input = document.getElementById('message');

    form.addEventListener('submit', (e) => {
    e.preventDefault();
    if (input.value) {
    socket.emit('chat message', input.value);
    input.value = '';
    }
    });

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

    该文件完成以下操作:

    • 建立与 Socket.IO 服务器的连接。
    • 获取和处理消息和表单元素,并在用户提交表单后发送消息。
    • 接收 chat message 事件,将消息呈现在无序列表中。
  7. 启动服务器:

    bash
    node server.js

  8. 打开浏览器,并输入 URL:http://localhost:3000。你会看到一个空白聊天室,可以向其中发送消息了。

示例说明

示例1:在服务器端添加昵称

你需要让用户设置昵称,将其附加到每个消息中,并在聊天室中显示。

为此,请使用以下代码修改 server.js:

io.on('connection', (socket) => {
    console.log('User connected');

    socket.on('new user', (name) => {
        console.log(`New user: ${name}`);
        socket.username = name;
    });

    socket.on('chat message', (msg) => {
        console.log(`Message received from ${socket.username}: ${msg}`);
        io.emit('chat message', `<strong>${socket.username}:</strong> ${msg}`);
    });

    socket.on('disconnect', () => {
        console.log('User disconnected');
    });
});

客户端代码:

form.addEventListener('submit', (e) => {
    e.preventDefault();
    const input = document.getElementById('message');

    if (input.value) {
        socket.emit('chat message', input.value);
        input.value = '';
    }
});

socket.on('chat message', (msg) => {
    const item = document.createElement('li');
    item.innerHTML = msg;
    messages.appendChild(item);
});

为了允许用户设置名称,您需要更改 form,并将名称作为参数发送到服务器:

<form action="">
  <input id="message" autocomplete="off" />
  <input id="name" autocomplete="off" placeholder="Name" />
  <button>Send</button>
</form>

然后,需在客户端代码的初始化期间向服务器发送此名称。

要在客户端代码中附加用户名,请将以下代码添加到 form 侦听器中:

const nameInput = document.getElementById('name');
socket.emit('new user', nameInput.value);

示例2:实现私聊功能

在聊天室中实现私聊功能,允许用户向其他用户发送私人消息,而不是在整个聊天室中广播消息。实现此功能需要以下步骤:

  1. 创建一个用于姓名的数组,用作“在哪里”的参考:

    javascript
    let users = [];

  2. 修改 new user 监听器以存储用户名,并在数组中添加它:

    `` javascript
    socket.on('new user', (name) => {
    console.log(
    New user: ${name}`);
    socket.username = name;

    users.push(name);
    io.emit('user list', users);
    

    });
    ```

  3. 在客户端发出“私聊”事件时,服务器应在其他用户上广播此事件:

    `` javascript
    socket.on('private message', ({ content, to }) => {
    const from = socket.username;
    console.log(
    Private Message From ${from} to ${to}: ${content}`);

    const recipientSocket = io.sockets.sockets.find(
      s => s.username === to
    );
    
    if (recipientSocket) {
        recipientSocket.emit('private message', {
            content,
            from,
        });
    }
    

    });
    ```

  4. 在客户端,为每个用户添加单击事件监听器,以允许它们单击特定的元素以与该用户进行通信。当此事件发生时,应生成“私聊”事件,将聊天内容和接收者的用户名传递给服务器。

客户端代码:

usersList.addEventListener('click', (e) => {
    if (e.target && e.target.nodeName === 'LI' && e.target.innerText != nameInput.value) {
        const to = e.target.innerText;
        const content = prompt(`Enter a private message to ${to}:`);
        socket.emit('private message', {
            content,
            to,
        });
    }
});

socket.on('private message', ({ content, from }) => {
    const item = document.createElement('li');
    item.innerHTML = `<i>${from} (Private): </i>${content}`;
    messages.appendChild(item);
});

还需添加HTML代码:

<h3>User List</h3>
<ul id="users"></ul>

请注意,通过删除或添加 HTML、CSS 或 JavaScript,可以定制聊天应用程序以满足您的需要。

以上就是 Node.js 与 Socket.IO 实现聊天室的完整攻略和两个示例,如果还有其他细节不理解的地方,欢迎在评论区留言提问。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Node.js用Socket.IO做聊天软件的实现示例 - Python技术站

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

相关文章

  • Node.js 深度调试方法解析

    Node.js 深度调试方法解析 为什么需要深度调试 Node.js? Node.js 是一个非常流行的后端开发框架,但是由于其异步、非阻塞的特性,在开发中常常会出现一些难以定位的问题。这时候深度调试就显得非常重要了。深度调试可以帮助开发者找到代码中的问题,并解决它们。下面是深度调试 Node.js 的一些方法。 调试 Node.js 的方法 Node.js…

    node js 2023年6月8日
    00
  • 深入理解JavaScript系列(49):Function模式(上篇)

    《深入理解JavaScript系列(49):Function模式(上篇)》是一篇讲解JavaScript中Function模式的文章。该模式为JavaScript中非常重要的一种模式,常用于实现函数的封装和模块化开发。 该篇文章主要从以下几个方面进行了讲解: Function模式的基本概念 首先,文章介绍了Function模式的概念,Function模式是指…

    node js 2023年6月8日
    00
  • node.js平台下的mysql数据库配置及连接

    下面是详细的攻略: node.js平台下的mysql数据库配置及连接 简介 MySQL是一种广泛使用的关系型数据库管理系统,在Web开发中扮演着重要的角色。而在Node.js平台下,可以通过MySQL模块提供的API来实现MySQL数据库的配置和连接。 安装 在开始之前,需要先安装mysql模块。在命令行中使用以下命令安装: npm install mysq…

    node js 2023年6月8日
    00
  • 详解如何在NodeJS项目中优雅的使用ES6

    标题:如何在NodeJS项目中优雅的使用ES6 在NodeJS项目中,要使用ES6语法是非常常见的需求,但如果没有特定的优化处理,代码很容易变得冗长、难以维护。下面提供了几个优雅的方法,可以让你在NodeJS项目中愉快地使用ES6。 安装Babel Babel是一个流行的工具,可以将ES6语法代码转换为ES5语法,以便在NodeJS项目中快速运行。安装Bab…

    node js 2023年6月8日
    00
  • node.js中的fs.close方法使用说明

    当在Node.js中读写文件或流时,通常需要关闭文件以释放与其相关的资源。fs.close方法可以用于关闭文件。 方法说明 fs.close方法用于关闭一个已经打开的文件。它的语法如下: fs.close(fd, callback) 其中,fd是文件描述符,它指向一个已经打开的文件。callback是一个回调函数,当文件关闭完成时被调用。该方法没有返回值。 …

    node js 2023年6月8日
    00
  • 详解用Node.js写一个简单的命令行工具

    那么我们来详细讲解一下如何用Node.js写一个简单的命令行工具。可以按照以下步骤进行操作: 第一步:创建一个新的Node.js项目 首先,需要创建一个新的Node.js项目。在命令行中,可以使用以下命令来创建一个新的项目: mkdir my-cli-tool cd my-cli-tool npm init 这将会让你进入一个交互式命令行,你需要回答一些问题…

    node js 2023年6月8日
    00
  • LRU算法在Vue内置组件keep-alive中的使用

    LRU算法是最近最少使用算法,是一种内存管理方式。Vue.js框架内置的keep-alive组件就是使用LRU算法来管理缓存的。下面详细讲解LRU算法在Vue内置组件keep-alive中的使用攻略。 1、什么是keep-alive? keep-alive是Vue.js内置的一个组件,可以使被包含的组件保留状态,避免多次渲染。也就是说,使用keep-aliv…

    node js 2023年6月8日
    00
  • Node.js之readline模块的使用详解

    下面是关于“Node.js之readline模块的使用详解”的完整攻略。 什么是readline模块? readline模块是Node.js中提供的一个实用模块,可以用来从流(如stdin)读取数据,并将数据输出到流(如stdout)中。它主要用于命令行交互式应用程序的开发。 安装readline模块 如果你使用的是Node.js的版本较为新的话,那么rea…

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