WebSocket 是一种支持双向通信的网络传输协议,可以让 Web 应用程序实时交换信息。在 Deno 中使用 WebSocket 可以轻松地实现双向通信,本文就来介绍一下如何使用 WebSocket 发送二进制数据。
为什么要发送二进制数据
WebSocket 发送消息的方法有两种:文本消息和二进制消息。文本消息是指发送一串字符,比如一句话或者一个 JSON 对象。而二进制消息则可以发送任何数据,比如图片、音频、视频等。在某些场景下,使用二进制消息可以更好地满足需求。
WebSocket 的基本使用方法
在 Deno 中,我们可以使用 WebSocket
对象来创建 WebSocket 服务器或者客户端。首先我们需要创建一个 WebSocket 服务器:
// javascriptcn.com 代码示例 import { serve } from "https://deno.land/std/http/server.ts"; import { WebSocket, isWebSocketCloseEvent, } from "https://deno.land/std/ws/mod.ts"; const server = serve({ port: 8080 }); console.log("WebSocket server running on port 8080"); for await (const req of server) { if (req.url === "/ws") { const { conn, r: bufReader, w: bufWriter, headers } = req; WebSocket.accept(conn).then(async (ws: WebSocket) => { console.log("client connected"); for await (const event of ws) { if (isWebSocketCloseEvent(event)) { console.log("client disconnected"); } else if (typeof event === "string") { console.log(`text message received: ${event}`); await ws.send(event); } else if (event instanceof Uint8Array) { console.log("binary message received"); // TODO: 处理二进制消息 } } }); } }
上面的代码创建了一个 WebSocket 服务器,监听 8080 端口。当有客户端连接到 /ws
路径时,会调用 WebSocket.accept
方法接收这个客户端的连接。在这个方法里面,我们可以对这个客户端的文本消息和二进制消息进行处理。
对于客户端代码,我们可以使用 WebSocket
对象来建立连接,并发送消息:
// javascriptcn.com 代码示例 const ws = new WebSocket("ws://127.0.0.1:8080/ws"); ws.onopen = () => { console.log("connection opened"); const message = "hello world"; ws.send(message); }; ws.onmessage = (event) => { console.log(`text message received: ${event.data}`); }; ws.onclose = () => { console.log("server disconnected"); };
这段代码会创建一个 WebSocket 对象,连接到 ws://127.0.0.1:8080/ws
这个路径。当连接成功后,会发送一条文本消息 hello world
,并在接收到服务器的响应消息后输出。当连接关闭时,会输出 server disconnected
。
发送二进制数据
发送二进制数据需要使用 WebSocket
对象的 send
方法,并传入一个 ArrayBuffer
或者 Uint8Array
对象。下面是一个发送二进制图片的示例:
// javascriptcn.com 代码示例 const ws = new WebSocket("ws://127.0.0.1:8080/ws"); ws.onopen = () => { console.log("connection opened"); const img = await Deno.readFile("test.png"); ws.send(img); }; ws.onmessage = (event) => { console.log(`binary message received: ${event.data}`); }; ws.onclose = () => { console.log("server disconnected"); };
这段代码会读取当前路径下的 test.png
文件,并将其发送给服务器。当服务器收到这个二进制消息后,会按照上面的方式进行处理。
总结
本文介绍了在 Deno 中如何使用 WebSocket 发送二进制数据。需要注意的是,在发送二进制数据时,很可能需要对数据进行压缩或者加密,以确保数据的安全性和传输效率。如果你想要了解更多关于 WebSocket 的知识,可以参考 WebSocket API 或者阅读 Websocket 底层原理 等相关资料。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6543ced57d4982a6ebdd0276