【Node.js从基础到高级运用】二十四、Node.js中实现全双工通信

这篇具有很好参考价值的文章主要介绍了【Node.js从基础到高级运用】二十四、Node.js中实现全双工通信。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

引言

在本篇博客文章中,我们将详细介绍如何在Node.js环境下使用WebSocket来实现全双工通信。WebSocket协议允许在用户的浏览器和服务器之间建立一个持久的连接,通过这个连接可以实现实时、双向的数据传输。

什么是WebSocket?

WebSocket是一种网络通信协议,提供了一种在单个TCP连接上进行全双工通信的方式。与传统的HTTP请求不同,WebSocket在建立连接后可以保持连接状态,使得数据可以随时从客户端发送到服务器,或者从服务器发送到客户端。

开始之前

在开始之前,请确保你的电脑上已经安装了Node.js。你可以通过访问Node.js官网来下载并安装最新版本的Node.js。

步骤1:创建Node.js项目

首先,打开命令提示符或终端,然后执行以下命令来创建一个新的Node.js项目:

mkdir websocket-demo
cd websocket-demo
npm init -y

这些命令将创建一个新的文件夹websocket-demo,并初始化一个新的Node.js项目。

步骤2:安装WebSocket库

我们将使用ws库来实现WebSocket通信。在项目文件夹中执行以下命令来安装ws库:

npm install ws

步骤3:创建WebSocket服务器

创建一个名为server.js的新文件,并添加以下代码:

const WebSocket = require('ws'); // 引入WebSocket库

// 创建WebSocket服务器,监听端口3000
const wss = new WebSocket.Server({ port: 3000 });

// 当有客户端连接时触发
wss.on('connection', function connection(ws) {
  console.log('客户端已连接');

  // 当从客户端接收到消息时触发
  ws.on('message', function incoming(message) {
    console.log('收到消息:', message);

    // 将消息回传给客户端
    ws.send(`服务器收到消息:${message}`);
  });

  // 向客户端发送欢迎消息
  ws.send('欢迎连接到WebSocket服务器');
});

console.log('WebSocket服务器正在监听端口3000...');

在这段代码中,我们创建了一个WebSocket服务器,监听3000端口。当有客户端连接时,我们会向客户端发送一条欢迎消息,并监听客户端发送的消息。当收到消息时,我们会将其打印出来,并发送一条回复消息。

步骤4:创建客户端HTML页面

创建一个名为index.html的新文件,并添加以下代码:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>WebSocket客户端示例</title>
<script>
  // 当页面加载完成时执行
  window.onload = function() {
    // 创建WebSocket连接
    const socket = new WebSocket('ws://localhost:3000');

    // 当连接打开时触发
    socket.onopen = function() {
      console.log('WebSocket连接已打开');
      // 发送消息到服务器
      socket.send('你好,服务器!');
    };

    // 当收到服务器消息时触发
    socket.onmessage = function(event) {
      console.log('收到服务器消息:', event.data);
    };

    // 当连接关闭时触发
    socket.onclose = function() {
      console.log('WebSocket连接已关闭');
    };

    // 当发生错误时触发
    socket.onerror = function(error) {
      console.error('WebSocket发生错误:', error);
    };
  };
</script>
</head>
<body>
<h1>WebSocket客户端示例</h1>
</body>
</html>

在这个HTML页面中,我们创建了一个WebSocket客户端,它会尝试连接到我们之前创建的WebSocket服务器。一旦连接成功,它会发送一条消息到服务器,并监听从服务器接收到的消息。

步骤5:运行WebSocket服务器

返回命令提示符或终端,运行以下命令来启动WebSocket服务器:

node server.js

步骤6:打开客户端HTML页面

在浏览器中打开index.html文件,你应该能够看到控制台中打印出“WebSocket连接已打开”和“收到服务器消息”的信息。

至此,你已经成功创建了一个简单的全双工WebSocket通信示例。客户端和服务器可以实时地发送和接收消息。

进阶:多个客户端之间的通信和消息广播

为了实现多个客户端之间的通信和消息广播,我们需要对之前的服务器代码进行一些修改。以下是一个简单的示例,展示了如何在WebSocket服务器上实现消息广播,使得一个客户端发送的消息可以被所有连接的客户端接收。

首先,我们修改server.js文件,添加广播功能:

const WebSocket = require('ws'); // 引入WebSocket库

// 创建WebSocket服务器,监听端口3000
const wss = new WebSocket.Server({ port: 3000 });

// 广播给所有客户端的函数
function broadcast(message) {
  // 遍历所有客户端
  wss.clients.forEach(function each(client) {
    // 检查客户端是否处于打开状态
    if (client.readyState === WebSocket.OPEN) {
      // 向客户端发送消息
      client.send(message);
    }
  });
}

// 当有客户端连接时触发
wss.on('connection', function connection(ws) {
  console.log('客户端已连接');

  // 当从客户端接收到消息时触发
  ws.on('message', function incoming(message) {
    console.log('收到消息:', message);

    // 广播消息给所有连接的客户端
    broadcast(`客户端说:${message}`);
  });

  // 向客户端发送欢迎消息
  ws.send('欢迎连接到WebSocket服务器');
});

console.log('WebSocket服务器正在监听端口3000...');

在这个修改后的版本中,我们添加了一个broadcast函数,它会遍历所有连接的客户端,并向它们发送消息。当服务器接收到一个客户端发送的消息时,它会调用broadcast函数,将这个消息发送给所有其他客户端。

客户端的代码可以保持不变,因为它们只需要处理从服务器接收到的消息。当你运行这个服务器并从一个客户端发送消息时,所有连接的客户端都会收到这条消息。

现在,你可以通过以下步骤来测试广播功能:

  1. 运行修改后的server.js文件来启动WebSocket服务器。
  2. 在浏览器中多次打开index.html文件以创建多个客户端。
  3. 从任何一个客户端发送消息,观察其他客户端是否也收到了相同的消息。

通过这种方式,你可以实现一个简单的聊天室功能,其中一个客户端的消息会被广播到所有其他客户端。这是实现多客户端通信的基础,并且可以根据具体需求进行扩展和优化。

总结

在本篇博客文章中,我们详细介绍了如何在Node.js环境下使用WebSocket实现全双工通信。我们首先了解了WebSocket协议的基本概念,然后逐步搭建了一个简单的WebSocket服务器和客户端。通过实际的代码示例,我们展示了如何在服务器端创建WebSocket服务,并在客户端页面中建立与服务器的连接以及进行消息的发送和接收。

通过以上步骤,我们可以总结出实现WebSocket通信的关键点:

  1. 使用ws库在Node.js中创建WebSocket服务器。
  2. 监听服务器端口,并为每个连接的客户端创建事件处理。
  3. 在客户端使用原生的WebSocket API与服务器建立连接,并处理打开、消息接收、关闭和错误事件。
  4. 实现了客户端和服务器之间的实时、双向通信。

WebSocket技术为实现实时Web应用提供了强大的支持,它可以用于聊天应用、在线游戏、实时数据推送等多种场景。通过本文的指南,你应该能够掌握基本的WebSocket通信流程,并能够在自己的项目中应用这一技术。文章来源地址https://www.toymoban.com/news/detail-855903.html

到了这里,关于【Node.js从基础到高级运用】二十四、Node.js中实现全双工通信的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python与CAD系列高级篇(二十四)分类提取坐标到excel

    本篇介绍以下功能开发: 1.对点、直线、多段线、圆、样条曲线分类读取坐标;2.提取坐标到excel。 需求: ① 用户选择内容。 ② 对选定内容分类提取坐标。 ③ 提取坐标到excel。 代码实现:

    2024年01月16日
    浏览(31)
  • 【随笔】Git 高级篇 -- 纠缠不清的分支 rebase | cherry-pick(二十四)

    💌 所属专栏:【Git】 😀 作  者:我是夜阑的狗🐶 🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询! 💖 欢迎大家:这里是CSDN,我总结知识的地方,喜欢的话请三连,有问题请私信 😘 😘 😘 您的点赞、关注、收藏、评论,是对我最大

    2024年04月12日
    浏览(37)
  • 在 Node JS 中实现微服务架构

    🙂 正如我们在之前的博客“单体与微服务:一种实用方法”中讨论的那样。但是今天我们要在 NodeJS 中实现微服务架构。 👉 您可以使用任何技术,如 Spring、Python 等。但我们将使用 NodeJS 进行演示。 🙂 您可以在此处找到 GitHub Repo (请在运行前在 Order、Payment 和 API-Gateway 目

    2024年02月04日
    浏览(27)
  • MySQL基础(二十四)索引的数据结构

    顺序查询和数据使用二叉树结构再进行查询,如图: 2.1 索引概述 MySQL官方对索引的定义为: 索引(Index)是帮助MySQL高效获取数据的数据结构 。 **索引的本质:**索引是数据结构。你可以简单理解为“排好序的快速查找数据结构”,满足特定查找算法。这些数据结构以某种方

    2024年02月03日
    浏览(31)
  • 静态网页设计二十四节气网站HTML+CSS+JS(web期末大作业)

    本网站介绍了中国二十四节气,中国二十四节气准确的反映了自然节律变化,在人们日常生活中发挥了极为重要的作用,二十四节气蕴含着悠久的文化内涵和历史积淀。 2 .1 整体页面布局 网页多次使用div进行页面排版和页面布局,同时使用了float的属性,页面内容清晰明了,

    2024年02月20日
    浏览(38)
  • javascript基础二十四:JavaScript中本地存储的方式有哪些?区别及应用场景?

    一、方式 javaScript本地缓存的方法我们主要讲述以下四种: cookie sessionStorage localStorage indexedDB cookie Cookie,类型为「小型文本文件」,指某些网站为了辨别用户身份而储存在用户本地终端上的数据。是为了解决 HTTP无状态导致的问题 作为一段一般不超过 4KB 的小型文本数据,它

    2024年02月08日
    浏览(52)
  • 【JavaSE】Java基础语法(二十三):递归与数组的高级操作

    递归的介绍 以编程的角度来看,递归指的是方法定义中调用方法本身的现象 把一个复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解 递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算 递归的基本使用 递归的注意事项 递归一定要有出口。否

    2024年02月06日
    浏览(60)
  • 基于Vue、Axios、Node.js的图书管理系统【网页前端高级编程】

    本图书管理系统是基于Vue、Ajax、Node.js等技术的管理系统,笔者给其命名为阳光图书管理系统,意味着我们这个年纪应该活得洒脱像阳光一样,应充满活力与信心。再此感谢老师朋友的悉心指导,由于此系统是笔者初次完成的一个小型管理系统,必定有许多纰漏,如有不足请指正。

    2024年02月09日
    浏览(45)
  • Node.js |(一)Node.js简介及计算机基础 | 尚硅谷2023版Node.js零基础视频教程

    学习视频 :尚硅谷2023版Node.js零基础视频教程,nodejs新手到高手 可以 让其他人访问我们编写的网页 。 为 后续的框架学习 打基础。 Node.js 是一个 开源 的,跨平台的 JavaScript 运行环境。 通俗来讲 : Node.js 就是一款 应用程序 ,是一款软件,它可以 运行 Javascript 。 开发服务

    2024年02月13日
    浏览(37)
  • Node.js |(二)Node.js API:fs模块 | 尚硅谷2023版Node.js零基础视频教程

    学习视频 :尚硅谷2023版Node.js零基础视频教程,nodejs新手到高手 fs : file system ,文件系统。 fs模块可以实现与硬盘的交互 ,例如文件的创建、删除、重命名、移动、内容的写入读取以及文件夹的相关操作。 语法 : fs.writeFile(file,data[,options],callback) 参数说明 : file 文件名

    2024年02月12日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包