nodejs基于WS模块实现WebSocket聊天功能的方法

yizhihongxing

Node.js是基于Chrome V8引擎构建的一个运行时环境,可以让JavaScript运行在服务器端,WS是一种基于TCP协议之上进行端到端传输的网络协议,用于实现浏览器与服务器双向通信。结合使用Node.js和WS模块可以实现WebSocket聊天功能。

以下是实现WebSocket聊天功能的方法:

1. 安装WS模块

可以使用npm命令安装WS模块,命令如下所示:

npm install ws

2. 创建WebSocket服务器

首先需要创建一个WebSocket服务器,监听端口并处理连接请求。WS模块提供了WebSocket.Server类,可以通过该类来创建WebSocket服务器。

示例代码如下所示:

const WebSocket = require('ws');

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

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

  socket.on('message', function (data) {
    console.log('Received message:', data);
  });

  socket.on('close', function () {
    console.log('Client disconnected');
  });
});

上述代码创建了一个WebSocket服务器,监听8080端口。当有客户端连接时,会打印“Client connected”信息,并且可以监听该连接上的message和close事件。当收到客户端发送过来的消息时,会打印“Received message:”信息,当客户端断开连接时,会打印“Client disconnected”信息。

3. 客户端连接WebSocket服务器

在客户端创建WebSocket对象,连接到服务器。可以使用WebSocket对象的send方法来发送消息,使用onmessage事件来监听服务端发送给客户端的消息。

示例代码如下所示:

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

socket.onopen = function () {
  console.log('Connected to server');
};

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

socket.onclose = function () {
  console.log('Disconnected from server');
};

let message = 'Hello, World!';
socket.send(message);

上述代码创建一个WebSocket对象,连接到服务器上的8080端口。当连接成功时,会打印“Connected to server”信息,当接收到服务端发送过来的消息时,会打印“Received message:”信息,当连接关闭时,会打印“Disconnected from server”信息。同时,该客户端还会发送一条消息给服务器。

示例1:实现多人聊天室

下面是使用Node.js和WS模块实现多人聊天室的示例代码:

const WebSocket = require('ws');

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

let clients = [];

server.on('connection', function (socket) {
  console.log('Client connected');
  clients.push(socket);

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

  socket.on('close', function () {
    console.log('Client disconnected');
    clients = clients.filter((client) => client !== socket);
  });
});

上述代码实现了一个多人聊天室的功能。当有客户端连接时,将客户端添加到clients数组中;当收到客户端发送的消息时,将该消息发送给所有连接到服务器的客户端,代码中使用forEach遍历clients数组,通过client.send(data)方法向每个客户端发送消息;当客户端关闭连接时,从clients数组中移除该客户端。

示例2:实现私聊功能

下面是使用Node.js和WS模块实现私聊功能的示例代码:

const WebSocket = require('ws');

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

let clients = [];

server.on('connection', function (socket) {
  console.log('Client connected');
  clients.push(socket);

  socket.on('message', function (data) {
    console.log('Received message:', data);
    const index = data.indexOf('|');
    const receiver = data.substring(0, index);
    const message = data.substring(index + 1);
    clients.forEach((client) => {
      if (client !== socket && client.readyState === WebSocket.OPEN) {
        if (client === receiver || client === socket) {
          client.send(message);
        }
      }
    });
  });

  socket.on('close', function () {
    console.log('Client disconnected');
    clients = clients.filter((client) => client !== socket);
  });
});

上述代码实现了一个私聊功能,当收到一个消息时,先通过“|”分割该消息,分别得到接收者和消息内容;然后遍历clients数组,如果接收者是发送消息的客户端或者消息发送给的客户端,则向该客户端发送消息。

以上是基于WS模块实现WebSocket聊天功能的完整攻略,希望可以帮助到你。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:nodejs基于WS模块实现WebSocket聊天功能的方法 - Python技术站

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

相关文章

  • node.js入门学习之url模块

    Node.js入门学习之url模块 什么是url模块? url模块是Node.js标准库中的一个模块,主要用于处理和解析URL地址。 如何使用url模块? 要使用url模块,首先需要使用require方法引入: const url = require(‘url’); 然后就可以使用url模块提供的方法了。 url.parse方法 url.parse()方法用…

    node js 2023年6月8日
    00
  • 创建简单的node服务器实例(分享)

    创建简单的node服务器实例是一项基础的Web开发技能,在此分享一份详细攻略: 创建一个node.js服务器实例 const http = require(‘http’); const hostname = ‘127.0.0.1’; const port = 3000; const server = http.createServer((req, res) …

    node js 2023年6月8日
    00
  • Node.js 中常用内置模块(path 路径模块)

    Node.js 中常用内置模块之一是 path 路径模块,它可以帮助我们轻松地操作和处理文件路径。在本文中,我们将深入探讨它的各种方法和用法。 安装和引用 path 模块是 Node.js 内置的,您不需要任何额外的安装步骤。您只需要使用 require() 函数将它引入您的脚本中即可: const path = require(‘path’); 属性 pa…

    node js 2023年6月8日
    00
  • 使用nodeJS中的fs模块对文件及目录进行读写,删除,追加,等操作详解

    使用fs模块进行文件及目录的读写、删除、追加等操作 在Node.js中,fs模块是负责文件系统操作的模块。它提供了丰富的API接口,可以实现对文件及目录进行读写、删除、追加等操作。下面我们详细讲解如何使用fs模块进行这些操作。 读取文件 读取文件最简单的方式是使用fs.readFile方法,该方法接受两个参数:文件路径和回调函数。回调函数的第一个参数是读取到…

    node js 2023年6月8日
    00
  • Node.js的基本应用你知道多少

    Node.js的基本应用攻略 Node.js是一种基于Chrome V8引擎的JavaScript运行环境,它能使JavaScript代码运行在服务器端。下面将介绍使用Node.js的基本应用。 安装Node.js 要使用Node.js,需要首先在计算机上安装它。可以在官网https://nodejs.org/上下载相关的安装程序。安装完成后,可以通过以下命…

    node js 2023年6月8日
    00
  • node实现登录图片验证码的示例代码

    下面是关于如何用Node.js实现登录图片验证码的详细攻略。包括以下步骤: 安装依赖 我们需要引入一个第三方库,来帮我们实现图片验证码。可以使用captcha实现。可以执行以下命令安装: npm i svg-captcha -S 实现思路 我们需要在用户请求登录页面时,生成一个图片验证码,将生成的图片存储到session中,并把图片返回给页面。用户在输入账号…

    node js 2023年6月8日
    00
  • Nest.js系列学习控制器使用示例详解

    首先,感谢您对本网站“Nest.js系列学习控制器使用示例详解”攻略的关注。以下是本攻略的完整内容。 一、 概述 本攻略主要介绍了Nest.js控制器的使用。由于控制器是Nest.js应用程序中的核心部分,因此了解控制器和掌握其使用方法非常重要。 什么是Nest.js的控制器? Nest.js的控制器是处理网络请求的核心组件。控制器处理传入的请求并在向客户端…

    node js 2023年6月8日
    00
  • Node.js 条形码识别程序构建思路详解

    Node.js 条形码识别程序构建思路详解 前言 我们可以使用Node.js编写条形码识别程序,主要使用了两个npm库——Jimp和jsfeat 构建思路 步骤如下: 使用Jimp库加载图片 将图片灰度化、二值化处理 使用jsfeat库做边缘检测 通过分析边缘检测得到条形码位置及其方向 通过条形码位置和方向,将条形码切出来(如果需要的话) 解码条形码 具体实…

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