基于Node.js + WebSocket打造即时聊天程序嗨聊

yizhihongxing

那么我们就来详细讲解一下“基于Node.js + WebSocket打造即时聊天程序嗨聊”的完整攻略。

什么是WebSocket

WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议,它使得客户端和服务器之间的实时数据传输变得更加简单。

Node.js 中的 WebSocket

在 Node.js 中,有很多第三方库可以用来轻松地实现 WebSocket 协议。在我们的示例中,我们使用 ws 库 (https://github.com/websockets/ws)。

实现过程

以下是构建一个简单的聊天应用程序的步骤:

  1. 创建一个 Node.js 应用程序并安装必要的模块

在终端中创建一个新文件夹并初始化一个新的 Node.js 应用程序:

mkdir chat-app
cd chat-app
npm init -y

安装websocket模块

npm install ws

在应用程序的根目录下创建一个名为 index.js 的文件,然后在文件中引入 ws 模块:

const WebSocket = require('ws');
  1. 创建 WebSocket 服务器

index.js 文件中创建一个 WebSocket 服务器:

const WebSocket = require('ws');

const server = new WebSocket.Server({ port: 8080 });

console.log('WebSocket server started');

在上面的代码中,我们创建了一个 WebSocket 服务器实例,并将其绑定到本地计算机的 8080 端口上。

  1. 监听连接和消息

当客户端连接到服务器时,将触发 connection 事件。我们可以将这个事件附加到服务器实例上:

server.on('connection', (socket) => {
  console.log('Client connected.');

  socket.on('message', (message) => {
    console.log('Received message:', message);
  });
});

在上面的代码中,我们添加了一个事件监听器来处理客户端连接事件。当 connection 事件被触发时,我们会打印一条日志,指示新的客户端连接到了服务器。然后,我们添加了另一个事件监听器来处理 message 事件。当客户端发送一条消息时,我们将会打印这条消息到控制台上。

  1. 连接WebSocket

在客户端中,我们可以使用浏览器的 WebSocket API 来连接到我们的服务器:

const socket = new WebSocket('ws://localhost:8080');

socket.addEventListener('open', (event) => {
  console.log('WebSocket connected.');
});

socket.addEventListener('message', (event) => {
  console.log('Received message:', event.data);
});

在上面的代码中,我们创建了一个 WebSocket 对象,并将其连接到我们的服务器上。当连接建立时,将触发 open 事件。在这个事件处理程序中,我们会打印一条消息,指示 WebSocket 已经连接到服务器。同样地,在接收到来自服务器的消息时,我们将就在控制台打印这条消息。

  1. 发送消息

现在,我们已经连接了 WebSocket 并已经处理了来自服务器的消息。要发送一条消息,我们可以使用 send 方法:

socket.send('Hello, server!');

在上面的代码中,我们向服务器发送了一条消息。当服务器接收到这条消息时,我们会在控制台上得到相关的输出。

示例

  1. 实现广播功能:当客户端发送一个消息到服务器时,服务器将把这个消息广播给所有已连接的客户端。
const WebSocket = require('ws');

const server = new WebSocket.Server({ port: 8080 });

console.log('WebSocket server started');

server.on('connection', (socket) => {
  console.log('Client connected.');

  socket.on('message', (message) => {
    console.log('Received message:', message);
    server.clients.forEach((client) => {
      if (client.readyState === WebSocket.OPEN) {
        client.send(message);
      }
    });
  });
});

在上面的代码中,在连接事件的处理程序中,我们添加了一行代码来循环遍历服务器上的所有客户端,并将接收到的消息发送给每个客户端。

  1. 实现点对点通信:在我们的示例中,我们假设每个客户端都有一个唯一的 ID。当一个客户端向服务器发送一条消息时,服务器会将这条消息发送给另一个指定的客户端。
const WebSocket = require('ws');

const server = new WebSocket.Server({ port: 8080 });

console.log('WebSocket server started');

const clients = {};

server.on('connection', (socket) => {
  console.log('Client connected.');

  socket.on('message', (message) => {
    console.log('Received message:', message);

    const { sender, recipient, content } = JSON.parse(message);

    if (!clients[sender]) {
      clients[sender] = socket;
    }

    if (clients[recipient]) {
      clients[recipient].send(content);
    }
  });
});

在上面的代码中,在连接事件的处理程序中,我们创建了一个名为 clients 的全局对象,用于存储已连接的客户端。当一个客户端向服务器发送一条消息时,我们首先将消息解析为一个包含发送者、接收者和消息内容的对象。然后,我们在 clients 对象中查找发送者和接收者。如果我们没有找到发送者,我们将创建一个新的记录。最后,如果接收者存在并且连接到服务器,我们将向它发送消息。

这样,我们就完成了基于 Node.js + WebSocket 的即时聊天程序嗨聊的构建。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:基于Node.js + WebSocket打造即时聊天程序嗨聊 - Python技术站

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

相关文章

  • Node.js断点续传的实现

    下面就是“Node.js断点续传的实现”的完整攻略。 一、什么是断点续传 断点续传顾名思义就是在文件下载中断时,一定时间段后通过已下载的数据点开始接着上次的下载进行下载,从而达到不用重头下载的效果,实现了文件下载的高效性。 二、实现断点续传的关键点 获取已下载的数据断点 根据数据断点设置请求头 Range 保存数据断点 三、实现思路 我们可以通过读取已下载的…

    node js 2023年6月8日
    00
  • VUE+node(express)实现前后端分离

    介绍 前后端分离是一种流行的应用架构,它将前端和后端的代码分别放置在不同的服务器上,通过 API 接口来进行通信。这种架构方式具有很多优点,比如可以提高应用的并发能力、减小服务器压力、便于扩展性等等。下面我将介绍如何使用VUE和Node.js的Express实现前后端分离。 前端实现 步骤一:安装VueCLI 为了快速创建Vue.js应用程序,我们需要先安装…

    node js 2023年6月8日
    00
  • NodeJS加密解密及node-rsa加密解密用法详解

    NodeJS加密解密及node-rsa加密解密用法详解 什么是加密解密? 加密解密是指对信息进行加密编码使其不被未经授权的第三方所访问,然后再通过解密还原的过程。 NodeJS加密解密 NodeJS自带了Crypto模块,提供了包含对称加密,散列(哈希),HMAC,RSA等加密算法的支持。下面是一些加密解密实例: 对称加密 对称加密就是密钥加密和密钥解密都使…

    node js 2023年6月8日
    00
  • Vue $nextTick 为什么能获取到最新Dom源码解析

    Vue.js 中的 $nextTick 方法可以用于在 DOM 更新之后执行回调函数。它是异步方法,是在当前代码执行栈任务队列清空之后才执行的。 使用 $nextTick 方法的主要目的是确保我们可以拿到最新的 DOM 树,在 DOM 更新后再执行回调函数,可用于以下情况: 1.当需要操作已更新的 DOM 节点时;2.当需要基于已更新的 DOM 计算一些属性…

    node js 2023年6月8日
    00
  • 教你使用webpack打包编译TypeScript代码

    教你使用webpack打包编译TypeScript代码 为什么要使用webpack和TypeScript? 在前端开发的过程中,我们经常需要使用Webpack来统一打包我们的前端代码,将多个js、css文件合并成一个或多个bundles,减小代码的体积,并且利于加载和缓存。 而TypeScript是JavaScript的一种超集,它给JavaScript加上…

    node js 2023年6月9日
    00
  • JS前端开发模拟虚拟dom转真实dom详解

    下面是“JS前端开发模拟虚拟DOM转真实DOM详解”的完整攻略。 什么是虚拟DOM 虚拟DOM(Virtual DOM)是由React.js提出的一种机制,通过在JS对象中模拟DOM节点的状态信息,实现了高效的DOM操作,从而优化了前端的性能。虚拟DOM一般都是采用JavaScript对象来描述一棵树形结构,每个节点表示一个组件或元素,其中包含了当前节点所需…

    node js 2023年6月8日
    00
  • nodejs中安装ghost出错的原因及解决方法

    安装 Ghost 是搭建博客的必要步骤之一,但在安装过程中可能会遇到错误,这篇攻略将详细讲解在 Node.js 中安装 Ghost 出错的原因及解决方法。 问题描述 在使用命令 npm install -g ghost 安装 Ghost 时,可能会遇到以下错误: gyp ERR! build error gyp ERR! stack Error: `make…

    node js 2023年6月8日
    00
  • koa+mongoose实现简单增删改查接口的示例代码

    我来给你讲解一下 “koa+mongoose实现简单增删改查接口的示例代码”的完整攻略。 一、前期准备 在开始编写代码之前,我们需要先准备一些工作: 安装koa和koa-router npm install koa koa-router –save 安装mongoose npm install mongoose –save 创建并连接数据库 在进行增删改…

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