前言
Deno 是一个由 Node.js 的创始人 Ryan Dahl 开发的运行时环境,它的目标是提供一种更安全、更现代化的 JavaScript 和 TypeScript 运行环境。与 Node.js 不同的是,Deno 原生支持 TypeScript,同时也内置了许多常用的功能,比如 HTTP、WebSocket 等。
本文将介绍在 Deno 中如何使用 WebSocket,希望能够帮助读者更深入地了解 Deno 的使用。
WebSocket 简介
WebSocket 是一种基于 TCP 协议的双向通信协议,在客户端和服务器之间建立一个持久性的连接,可以实现实时通信。WebSocket 协议最初由 Google 开发,现在已经成为了一种国际标准。
在传统的 HTTP 请求中,客户端向服务器发送请求后,服务器会返回一个响应,然后连接就会被关闭。而在 WebSocket 协议中,连接会一直保持打开状态,直到客户端或服务器端关闭连接,这样就可以实现实时通信了。
在 Deno 中使用 WebSocket
在 Deno 中,我们可以使用官方提供的 std/ws 模块来实现 WebSocket 功能。下面是一个简单的 WebSocket 服务器示例:
// www.javascriptcn.com code example
import { serve } from "https://deno.land/std/http/server.ts";
import { acceptWebSocket, isWebSocketCloseEvent } from "https://deno.land/std/ws/mod.ts";
const server = serve({ port: 8080 });
console.log("WebSocket server started on ws://localhost:8080");
for await (const req of server) {
if (req.url === "/ws") {
const { conn, r: bufReader, w: bufWriter, headers } = req;
acceptWebSocket({
conn,
bufReader,
bufWriter,
headers,
})
.then(async (ws) => {
console.log("WebSocket connected");
for await (const event of ws) {
if (typeof event === "string") {
console.log("Received message: ", event);
ws.send(`You said: ${event}`);
} else if (isWebSocketCloseEvent(event)) {
console.log("WebSocket closed");
}
}
})
.catch((err) => {
console.error(`Failed to accept WebSocket: ${err}`);
});
}
}上面的代码首先创建了一个 HTTP 服务器,然后监听请求。当请求的 URL 是 /ws 时,就会调用 acceptWebSocket 函数来接受 WebSocket 连接。在接受连接之后,就可以使用 for await (const event of ws) 循环来监听 WebSocket 的消息和关闭事件。
在客户端,我们可以使用 JavaScript 的 WebSocket 对象来连接服务器:
// www.javascriptcn.com code example
const ws = new WebSocket("ws://localhost:8080/ws");
ws.addEventListener("open", () => {
console.log("WebSocket connected");
ws.send("Hello, server!");
});
ws.addEventListener("message", (event) => {
console.log(`Received message: ${event.data}`);
});
ws.addEventListener("close", () => {
console.log("WebSocket closed");
});上面的代码首先创建了一个 WebSocket 对象,然后监听 open、message 和 close 事件。在连接建立之后,客户端就可以向服务器发送消息了。
结语
本文介绍了在 Deno 中如何使用 WebSocket,希望对读者有所帮助。WebSocket 是一种非常方便的实时通信协议,在实际项目中也非常常见。如果读者想要深入学习,可以参考官方文档和示例代码。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67d517a9a941bf713496b231