使用 WebSocket 发送二进制数据:最佳实践

这篇具有很好参考价值的文章主要介绍了使用 WebSocket 发送二进制数据:最佳实践。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

WebSocket 技术提供了一种在客户端和服务器间建立持久连接的方法,使得双方可以在打开连接后随时发送数据,而不必担心建立复杂的持久连接机制。同时,使用二进制数据,如ArrayBuffer,可以更有效率地传送图像、声音等信息。本指南旨在深入探讨如何使用WebSocket传输二进制数据,并概述其在实时通讯中的潜在应用。

一、实时通讯的强化:利用ArrayBuffer

实例化WebSocket进程,然后用二进制传输数据,这一段演示了在实时互动场景中若干强大的应用。

1、收发数据的实时游戏

在游戏开发领域,实时传输图形和音频资源的需求非常常见。这些资源的启动和移动必须快速而流畅。

2、音视频的即时传输

用于WebRTC之类应用的音频和视频流,可以通过WebSocket以二进制数据形式进行实时传输。

3、文件的快速传递

无需传统的 HTTP 请求即可通过WebSocket快速传递图片、文档等二进制文件。

二、二进制数据传输:策略介绍

node.js中的WebSocket发送二进制数据

基本流程如下:

const socket = new WebSocket('ws://example.com');

socket.addEventListener('open', () => {
  const arrayBuffer = new ArrayBuffer(4);
  const dataView = new DataView(arrayBuffer);
  dataView.setInt32(0, 42);

  socket.send(arrayBuffer);
});

socket.addEventListener('message', (event) => {
  const convertedData = new Uint8Array(event.data);
  console.log(convertedData);
});

利用Blob对象发送

此方法通过封装成Blob对象来传输数据,同时允许指定类型。

const socket = new WebSocket('ws://example.com');

socket.addEventListener('open', () => {
  const binaryBlob = new Blob(['Binary content'], { type: 'application/octet-stream' });
  socket.send(binaryBlob);
});

仅发送ArrayBuffer的一部分

使用ArrayBufferView可以选择性地发送数据的一部分。

const socket = new WebSocket('ws://example.com');

socket.addEventListener('open', () => {
  const buffer = new ArrayBuffer(4);
  const view = new DataView(buffer);
  view.setInt32(0, 42);

  socket.send(view.slice(0, 2)); // 仅发送前两个字节
});

三、案例分析:实时二进制数据的WebSocket通信

接下来透过一个实际的例子,探索WebSocket如何传输ArrayBuffer数据。案例中包含创建一个简易的WebSocket服务器和客户端,服务器将会接收来自客户端的二进制数据。

建立一个WebSocket服务器

利用 Node.js 环境的ws库可快速执行此操作。

npm install ws

然后建立server.js

const WebSocket = require('ws');
const server = new WebSocket.Server({ port: 3000 });

server.on('connection', (client) => {
  client.on('message', (data) => {
    const clientData = new Uint8Array(data);
    console.log('Received:', clientData);
    sendBinaryDataToClient(client);
  });

  client.on('close', () => console.log('Disconnected'));
});

function sendBinaryDataToClient(client) {
  const buffer = new ArrayBuffer(4);
  const view = new DataView(buffer);
  view.setInt32(0, 84);

  client.send(buffer);
}

console.log('WebSocket server is active at ws://localhost:3000');

开发一个WebSocket客户端

你可以通过创建一个简单的Web页面来充当客户端,并连接至你的服务器。

<!DOCTYPE html>
<html>
<head>
<title>WebSocket Binary Test</title>
</head>
<body>
<script>
  const socket = new WebSocket('ws://localhost:3000');

  socket.addEventListener('open', () => {
    console.log('Connection established');
    sendBinaryData();
  });

  socket.addEventListener('close', () => {
    console.log('Disconnected');
  });

  function sendBinaryData() {
    const arrayBuffer = new ArrayBuffer(4);
    const view = new DataView(arrayBuffer);
    view.setInt32(0, 42);
    socket.send(arrayBuffer);
  }
</script>
</body>
</html>

如果你嫌用 html 建一个客户端过于麻烦,可以使用 Apifox 临时创建一个。

先是建立新的 HTTP 项目,接着把 WebSocket 端点添加到项目中。

websocket 二进制 java,websocket,信息与通信,前端,后端,学习方法

接下来,连入服务,比如 ws://localhost:3000,然后就可以发送信息。

websocket 二进制 java,websocket,信息与通信,前端,后端,学习方法

运行案例

开启服务端:

node server.js

在Web浏览器中打开客户端页面,或是透过在线工具如Apifox来连接WebSocket服务。

websocket 二进制 java,websocket,信息与通信,前端,后端,学习方法

通过这些步骤,即可在客户端和服务器之间建立实时通讯链路,传递并接收二进制数据。

四、最佳实践小贴士

  • 确保客户端和服务器端使用兼容的数据格式。
  • 为节省宽带,考虑压缩数据。
  • 使用传输加密来保护数据安全。

五、结论

本文展现了WebSocket如何有效地运用二进制数据进行通信。我们通过概念解释,实际案例和最佳实践来全方位地介绍了该技术,帮助你充分利用WebSocket的强大能力。

参考链接

  1. MDN Web Docs - WebSocket
  2. MDN Web Docs - ArrayBuffer

学习更多:文章来源地址https://www.toymoban.com/news/detail-845808.html

  • 使用 aiohttp 实现 websocket 通信
  • WebSocket 数据帧:载荷、掩码、消息类型等介绍

到了这里,关于使用 WebSocket 发送二进制数据:最佳实践的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 【FPGA仿真】Matlab生成二进制、十六进制的txt数据以及Vivado读取二进制、十六进制数据并将结果以txt格式保存

    在使用Vivado软件进行Verilog程序仿真时可能需要对模块输入仿真的数据,因此我们需要一个产生数据的方法(二进制或者十六进制的数据),Matlab软件是一个很好的工具,当然你也可以使用VS等工具。 以下分别给出了使用Matlab模拟产生二进制和十六进制数据的例子,例子仅供参

    2024年02月01日
    浏览(37)
  • uniapp小程序(原生微信小程序也可以使用),获取接口二进制流数据上传文件到服务器

    需求:通过接口返回的二进制流数据,这个流数据他是一个xlsx文档,需要给到用户一个文档线上连接。 下面是具体代码,注意只针对二进制的文件数据,如果图片上传直接调用uploadFile就可以,并且兼容原生微信小程序。  

    2024年02月16日
    浏览(32)
  • C语言二进制数据和16进制字符串互转

    知识点:结构体中的“伸缩型数组成员”(C99新增) C99新增了一个特性:伸缩型数组成员(flexible array member),利用这项特性声明的结构,其最后一个数组成员具有一些特性。第1个特性是,该数组不会立即存在。第2个特性是,使用这个伸缩型数组成员可以编写合适的代码,就

    2024年02月13日
    浏览(33)
  • JS中的常见二进制数据格式

    格式 描述 用途 示例 ArrayBuffer 固定长度的二进制数据缓冲区,不直接操作具体的数据,而是通过类型数组或DataView对象来读写 用于存储和处理大量的二进制数据,如文件、图像等 let buffer = new ArrayBuffer(16); TypedArray 基于ArrayBuffer对象的视图,提供特定格式的读写接口 用于操作

    2024年04月11日
    浏览(32)
  • Python读取SD卡二进制数据

    在我们使用 STM32 或者 FPGA 采集数据的时候,需要将数据存储到SD卡中,因为数据是按照地址存储的,并且没有文件结构,所以不能直接用电脑的文件管理器读取,下面是一种读取数据的办法 正点原子 STM32F407ZG 探索者 运行完此代码后,将会在当前文件夹里面生成一个 output.b

    2024年02月07日
    浏览(27)
  • html2canvas生成图片地址Base64格式转成blob在转成file(二进制)可正常发送(保姆教程,复制粘贴可用)

    开始:                                                  最终结果:                                                      1. html2canvas方法生成的图片地址已Base64编码形式放在img标签src中可直接展示生成的图片(注意 页面标签获取位置 ,还有个 setTimeout 页面渲染需要

    2024年02月13日
    浏览(34)
  • Elasticsearch:二进制数据类型 - binary field

     二进制(binary)类型接受二进制值作为 Base64 编码字符串。 该字段默认不存储且不可搜索。Base64 编码的二进制值不得嵌入换行符 n 。 这听起来像是,将二进制对象存储在 Elasticsearch 中的单个字段中 二进制字段接受以下参数: 条目 描述 doc_values 该字段是否应该以列跨度的

    2024年02月09日
    浏览(30)
  • 如何使用VSCode来查看二进制文件

    2023年11月6日,周一下午 目录 方法1:安装插件Binary Viewer 然后用vscode打开一个二进制文件,并点击右上角的\\\"HEX\\\" 方法2:安装插件Binary 然后用vscode打开一个二进制文件,并点击右上角的\\\"B\\\" 特点:功能比较完善 然后用vscode打开一个二进制文件,并点击右上角的\\\"HEX\\\" 特点:功能简

    2024年02月03日
    浏览(34)
  • 读数据压缩入门笔记02_二进制和熵

    2024年02月06日
    浏览(75)
  • 二进制方式安装MySQL并备份数据库

    ①代码 ②结果   ①代码 ②结果 

    2024年02月22日
    浏览(39)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包