JavaScript 通过 WebSocket 连接服务器实现推送消息

随着互联网技术的发展,各种应用程序越来越需要实时通信的功能。WebSocket 是一种基于 TCP 协议的全双工通信协议,它可以在浏览器和服务器之间建立一个稳定的连接,实现实时通信的效果。在前端开发中,我们可以使用 JavaScript 来通过 WebSocket 连接服务器实现推送消息的功能。

WebSocket 的优势

WebSocket 相比传统的 HTTP 协议,有如下优势:

  • 实时性更强:WebSocket 可以做到实时双向通信,无需等待请求和响应,可以实时地推送和接收数据。
  • 减少网络传输的开销:WebSocket 连接建立后,数据的传输只需在一次握手阶段传输头信息,之后只传输自身的数据信息,减少了网络传输的开销,提高了数据传输的速度。
  • 兼容性更好:WebSocket 协议已经成为 HTML5 标准,大部分浏览器都支持 WebSocket,无需下载插件。

实现 WebSocket 连接

服务端

WebSocket 连接需要在服务端打开一个 WebSocket 服务端口,在 Node.js 中可以通过 ws 包来实现 WebSocket 服务端,代码如下:

----- --------- - --------------

----- --- - --- ------------------ ----- ---- ---

-------------------- -------- -------------- -
  ------------------- ------------

  ---------------- -------- ----------------- -
    ---------------------- -------------
  ---

  -------------- --------
---

以上代码使用了 ws 包来实现了一个简单的 WebSocket 服务端,它会在 8080 端口上监听客户端的连接请求,并在连接成功时打印 "client connected",并且可以接收客户端发送的消息并打印出来,在连接成功后发送 "hello world" 到客户端。

客户端

在客户端中,我们需要使用 JavaScript 来连接 WebSocket 服务端,并实现消息的收发功能。代码如下:

----- -- - --- ---------------------------------

--------- - -------- ------ -
  -------------------------

  -----------------
--

------------ - -------- --------------- -
  ---------------------- ----------------
--

以上代码创建了一个 WebSocket 实例,并通过 ws.onopen 事件监听器在连接成功后打印 "connected",并且可以在连接成功后发送消息 "hello" 到 WebSocket 服务端中,通过 ws.onmessage 事件监听器来监听服务端发送的消息,并打印出来。

接收推送消息

上面的代码只能发送消息和接收客户端发送的消息,如果想要接收服务端主动推送过来的消息该怎么做呢?这需要使用 WebSocket 自带的 onmessage 事件监听器来实现。服务端可以随时往客户端推送消息,客户端需要准备好接收的过程。

在客户端中,我们可以如下来实现:

------------ - -------- --------------- -
  ---------------------- ----------------
--

以上代码中,当服务端发送消息过来时,会触发 onmessage 事件,从而执行函数中的代码。

在服务端中,我们可以通过 ws.send 方法来主动往客户端推送消息,如下所示:

------------------- -------- -------------- -
  ------------------- ------------

  -------------- --------

  ---------------------- -
    ----- ---- - --- -------

    ---------------- ---- -- -------------------------------
  -- ------
---

以上代码中,我们通过 setInterval 函数来定时推送消息到客户端中,实时发送当前时间信息,客户端会在接收到消息后打印出当前时间信息。

总结

通过本文的介绍,我们了解了如何使用 JavaScript 来通过 WebSocket 连接服务器实现推送消息功能,包括如何建立 WebSocket 连接,接收客户端消息,服务端主动推送消息等内容。随着对实时性需求的增加,WebSocket 连接在前端开发中越来越重要,而本文介绍的 WebSocket 推送消息功能也是从实际开发中得出的经验,希望能对读者有所帮助。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/64d0c77fb5eee0b5257c6e6c


猜你喜欢

  • ECMAScript 2020 中的模板字面量标签函数详解及实际应用

    随着前端技术的不断发展,ECMAScript 在不断更新升级,为开发者提供了更多实用的特性。其中,在 ECMAScript 2020 中,模板字面量标签函数是一个重要的新增特性。

    1 年前
  • Material Design 中使用 Toolbar 实现标题栏效果

    Material Design 是 Google 推出的一种全新的设计语言,它将具有高科技感的设计元素用于移动设备和 Web 页面中,打造出极简、强调内容、高效率的设计风格。

    1 年前
  • TypeScript 中如何使用高阶函数和函数柯里化

    TypeScript 中如何使用高阶函数和函数柯里化 在 TypeScript 中,高阶函数和函数柯里化可以帮助开发者更加方便地处理函数式编程的问题,并提高代码的可读性和可复用性。

    1 年前
  • 使用 PM2 监控 Node.js 应用的异常情况

    作为一名前端工程师,我们经常需要处理 Node.js 应用的错误情况。对于 Node.js 应用而言,如果遇到未捕获的异常,它将会自动崩溃。为了避免这种情况的发生,我们需要使用一些工具去监控我们的 N...

    1 年前
  • 如何使用 Vue 构建 SPA 并解决 Vue-router 刷新页面丢失数据的问题

    随着 Web 技术的不断发展,越来越多的网站开始使用 SPA(Single Page Application)来提高用户体验。Vue 作为一款流行的前端框架,广泛应用于 SPA 的开发中。

    1 年前
  • 如何在 Next.js 项目中高效使用 Tailwind

    在 Web 开发过程中,样式代码的书写和组织一直是开发者需要面对的问题。而 Tailwind CSS 提供了一种全新的解决方案,它是一个功能丰富且强大的 CSS 框架,可以帮助开发者快速构建出美观且适...

    1 年前
  • Docker 容器化时遇到的 web 服务启动问题解决方法

    在进行前端项目的 Docker 容器化时,有时会遇到 web 服务启动失败的问题。这个问题可以有多种原因,如端口占用、依赖未安装等。本文将介绍一些常见的错误和解决方法,帮助开发者更好地理解和解决这些问...

    1 年前
  • 使用 Chai.js 测试 React 组件时的常见错误及解决方法

    Chai.js 是一种流行的 JavaScript 测试框架,它具有易于使用和可扩展的特点。然而,在使用 Chai.js 测试 React 组件时,可能会遇到一些常见的错误。

    1 年前
  • SSE在客户端长连接实现中的优劣和应用场景分析

    前言 现如今,网页已经不是只能展示静态内容的页面了,随着前端技术的不断更新迭代,越来越多的网页开始拥有实时或者近实时的展示和交互功能。这种功能的实现离不开客户端与服务器之间的通讯,常见的实现手段有 A...

    1 年前
  • Web Components 微云盘组件实现

    Web Components 是前端技术中的一项重要发展,它通过封装定制化的 HTML 元素,使得我们能够更加方便、高效地构建可重用的组件。我们可以将 Web Components 理解为一种客制化的...

    1 年前
  • ECMAScript 2019 (ES10) 新特性之 Fixed Position Numeric Separator

    ECMAScript 2019(ES10)是 JavaScript 的最新版本,它为语言引入了很多新的特性和语法。其中一个新特性就是 Fixed Position Numeric Separator。

    1 年前
  • Fastify 中的事件循环机制

    在编写前端应用程序时,事件循环是一个至关重要的概念。事件循环指的是对事件的轮询和处理,它是 JavaScript 异步编程模型的基础,也是实现高效性和响应性的关键因素。

    1 年前
  • Headless CMS 与响应式设计的实现及优化方案

    前言 在现代 Web 应用中,Headless CMS 和响应式设计分别是非常重要的两个方面。Headless CMS 是一个独立的、无头的内容管理系统,它可以与各种客户端(如 Web、移动应用和 I...

    1 年前
  • Express.js 如何处理 HTTP/2

    HTTP/2 是目前 Web 技术的最新标准,它通过多路复用、二进制传输等优化,提高了 Web 请求和响应的效率。Express.js 作为 Node.js 中最受欢迎的 Web 框架,在处理 HTT...

    1 年前
  • JavaScript 中的高性能数据结构

    在前端开发中,优化性能是非常重要的一项工作。其中,数据结构的选择及使用方式,对于代码性能的影响非常大。本文将介绍一些常见的高性能数据结构及它们在 JavaScript 中的使用方法。

    1 年前
  • CSS Flexbox 详解:如何实现自适应竖向布局

    CSS Flexbox 是一种布局模式,可以轻松和灵活地实现自适应竖向布局。本文介绍 Flexbox 的基本概念和语法,并提供几个示例展示如何使用 Flexbox 实现竖向布局。

    1 年前
  • Sequelize ORM 如何处理数据库连接断开问题

    Sequelize ORM 如何处理数据库连接断开问题 在开发过程中,我们经常使用 Sequelzie ORM 来管理数据库,但是在某些情况下,我们会遇到数据库连接断开的问题,这会导致程序的异常终止。

    1 年前
  • MongoDB 在 Docker 容器中部署及使用方法介绍

    随着云计算和容器化技术的流行,使用 Docker 容器部署数据库成为了一种更加方便、灵活的方式。MongoDB 作为一个非常流行的 NoSQL 数据库,也可以在 Docker 容器中进行部署。

    1 年前
  • Babel 扩展语法的实现

    前言 随着 JavaScript 语言的发展,新的语法特性不断涌现,但是这些特性在不同的浏览器中支持程度不同,为了兼容性,我们不得不使用 babel 进行转换。Babel 可以将 ES6+ 的代码转换...

    1 年前
  • 如何在 ECMAScript 2015 中使用正则表达式

    正则表达式是在前端领域和其他编程领域中都广泛应用的重要工具。ECMAScript 2015(ES6)中加入了一些新的特性,使得在 JavaScript 中使用正则表达式变得更加强大和方便。

    1 年前

相关推荐

    暂无文章