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

那么我们就来详细讲解一下“基于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中的fs.writeFileSync方法使用说明

    当我们需要在Node.js中写入文件时,可以使用fs模块提供的fs.writeFileSync方法(同步写入文件)。fs.writeFileSync方法需要接受两个参数,第一个是文件路径,第二个是写入的内容。 下面我将详细讲解如何正确使用fs.writeFileSync方法: 1. 导入fs模块 fs是Node.js的一个核心模块,我们需要先导入fs模块,才…

    node js 2023年6月8日
    00
  • NodeJS安装图文教程

    下面是关于“NodeJS安装图文教程”的完整攻略,包括以下几个部分: NodeJS的介绍 NodeJS的安装 NodeJS的配置和使用 示例说明 结束语 1. NodeJS的介绍 NodeJS是基于Chrome V8 JavaScript引擎的一种服务器端JavaScript解释器,它可以用来构建快速可扩展的网络应用程序。除了在服务器端使用,NodeJS还可…

    node js 2023年6月7日
    00
  • nodeJS微信分享

    NodeJS微信分享的完整攻略 微信分享可以让我们的网站在微信中分享链接,提高网站的露出率,这对于初创企业或新兴网站来说非常有用。可以使用NodeJS编写一个中间层,来实现生成微信签名以及管理分享的过程。 分享流程简介 用户点击“分享到微信朋友圈”或“分享给微信好友”按钮时,微信客户端会请求我们网站的签名信息和分享页面的链接。我们的网站需要在请求到来时,返回…

    node js 2023年6月9日
    00
  • node-red File读取好保存实例讲解

    下面是node-red对于文件读取和保存的完整攻略: 1. 首先安装node-red的fs模块 在使用node-red读取和保存文件之前,需要先安装node-red的fs模块。打开终端窗口,进入到node-red的安装目录下,然后输入以下命令进行fs模块的安装: npm install fs –save 2. 读取文件 在node-red中,使用fs模块的…

    node js 2023年6月8日
    00
  • JavaScript实现与使用发布/订阅模式详解

    JavaScript实现与使用发布/订阅模式详解 什么是发布/订阅模式? 发布/订阅模式(Publish/Subscribe Pattern)是一种在软件设计中广泛使用的模式,它将一个系统的组件分为两类:发布者(Publisher)和订阅者(Subscriber)。发布者负责发布事件(消息),订阅者通过注册事件来接收消息。 发布/订阅模式的应用场景 客户端与…

    node js 2023年6月8日
    00
  • React SSR 中的限流案例详解

    接下来我将详细讲解“React SSR 中的限流案例详解”的完整攻略,整个过程将从以下几个方面展开: 什么是React SSR 为什么要进行限流 React SSR 中的限流实现 示例说明 什么是React SSR React SSR (Server-Side Rendering)即服务端渲染是指将 React 组件在服务端(Node.js)中进行渲染,渲染…

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

    当我们开发基于 Node.js 的 Web 应用程序时,通常我们需要处理 URL 查询字符串参数和 POST 请求体中的数据。这时候就需要使用 Node.js 内置的 querystring 模块。 querystring 模块提供了一系列用于解析和序列化 URL 查询字符串参数和 POST 请求体中的数据的方法。其中一个非常有用的方法是 querystri…

    node js 2023年6月8日
    00
  • JavaScript Image对象实现原理实例解析

    以下是关于“JavaScript Image对象实现原理实例解析”的详细攻略: 1. 简介 在网页中,图片展现是很常见的一种基础性操作。JavaScript中的Image对象可以帮助我们更好地处理图片相关的逻辑,比如加载图片、判断图片是否加载完成等等。下面我们就对其实现原理进行详解。 2. 实现原理 2.1 创建Image对象 在JavaScript中,我们…

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