前言
在现代 Web 开发中,前端技术已经不再仅仅只是 HTML、CSS 和 JavaScript 了。越来越多的前端工程师开始涉及到后端开发和全栈开发。而在后端开发中,Node.js 一直占据着主导地位。但是最近,一个新的 JavaScript 运行时环境 Deno 开始崭露头角。
Deno 是一个由 Node.js 的创始人 Ryan Dahl 开发的运行时环境,它具有更好的安全性、更好的性能、更好的开发体验等优点。在本文中,我们将使用 Deno 和 Oak 框架来构建一个简单的聊天应用程序,希望能够帮助读者更好地了解 Deno 和 Oak。
准备工作
首先,我们需要安装 Deno。你可以通过以下命令在 macOS 或 Linux 上安装 Deno:
curl -fsSL https://deno.land/x/install/install.sh | sh
或者,你可以在 Windows 上使用 PowerShell 安装 Deno:
iwr https://deno.land/x/install/install.ps1 -useb | iex
安装完成后,你可以通过以下命令验证 Deno 是否已经成功安装:
deno --version
接下来,我们需要安装 Oak 框架。你可以通过以下命令在命令行中安装 Oak:
deno install --allow-net --allow-read https://deno.land/x/oak/mod.ts
构建一个简单的聊天应用程序
创建一个基本的服务器
首先,我们需要创建一个基本的服务器,用于处理客户端的请求。在 Deno 中,我们可以使用 Deno.listen()
函数来创建一个服务器。
import { serve } from "https://deno.land/std/http/server.ts"; const server = serve({ port: 8000 }); console.log("Server is running on port 8000"); for await (const req of server) { req.respond({ body: "Hello World\n" }); }
在上面的代码中,我们使用 serve()
函数创建了一个服务器,并指定了端口号为 8000。然后,我们使用 for await ... of
循环来监听客户端的请求,并使用 req.respond()
函数来响应客户端的请求。在这个例子中,我们只是简单地返回了一个字符串 "Hello World"。
处理 WebSocket 连接
接下来,我们需要处理 WebSocket 连接。在 Deno 中,我们可以使用 Deno.upgradeWebSocket()
函数来升级 HTTP 请求为 WebSocket 连接。
-- -------------------- ---- ------- ------ - ----- - ---- --------------------------------------- ------ - ----------- --------------- - ---- ---------------------------------- ----- ------ - ------- ----- ---- --- ------------------- -- ------- -- ---- ------- --- ----- ------ --- -- ------- - -- ----------- --- ----- -- ------- --- ----- -- ---------------- - ----- - ----- -- ---------- -- ---------- ------- - - ---- ----------------- ----- ---------- ---------- ------- -- ---------------------- ------------ -- --------------------- -- ------ ---------- ---------- - ---- - ------------- ----- ------ -------- --- - - ----- -------- ------------------- ---------- - ---------------------- ------------ --- ----- ------ --- -- --- - ---------------------- -------- --------- ------------- - ---------------------- --------------- -展开代码
在上面的代码中,我们首先使用 acceptable()
函数来判断客户端请求是否为 WebSocket 连接请求。如果是 WebSocket 连接请求,我们就使用 acceptWebSocket()
函数来升级 HTTP 请求为 WebSocket 连接,并调用 handleWebSocket()
函数来处理 WebSocket 连接。
在 handleWebSocket()
函数中,我们使用 for await ... of
循环来监听客户端发送的消息,并将消息原样发送回客户端。
构建一个聊天室
现在,我们已经可以处理 WebSocket 连接了。接下来,我们将构建一个简单的聊天室,让多个客户端之间可以相互发送消息。
-- -------------------- ---- ------- ------ - ----- - ---- --------------------------------------- ------ - ----------- --------------- - ---- ---------------------------------- ----- ------ - ------- ----- ---- --- ------------------- -- ------- -- ---- ------- ----- ------- - --- ----------------- --- ----- ------ --- -- ------- - -- ----------- --- ----- -- ------- --- ----- -- ---------------- - ----- - ----- -- ---------- -- ---------- ------- - - ---- ----------------- ----- ---------- ---------- ------- -- ---------- -- - ---------------------- ------------ ---------------- -------------------- -- ------------ -- --------------------- -- ------ ---------- ---------- - ---- - ------------- ----- ------ -------- --- - - ----- -------- ------------------- ---------- - --- ----- ------ --- -- --- - ---------------------- -------- --------- --- ------ ------ -- -------- - -- ------- --- --- - ----------------- - - - ---------------------- --------------- ------------------- -展开代码
在上面的代码中,我们首先创建了一个空的 Set
对象 sockets
,用于保存所有连接到服务器的 WebSocket。然后,当有客户端连接到服务器时,我们就将该客户端的 WebSocket 添加到 sockets
中,并调用 handleWebSocket()
函数来处理 WebSocket 连接。
在 handleWebSocket()
函数中,我们首先使用 for await ... of
循环来监听客户端发送的消息,并将消息发送给所有连接到服务器的客户端。注意,我们需要判断当前客户端是否为消息的发送者,如果是的话就不需要再将消息发送回给自己了。
最后,当客户端断开连接时,我们需要将该客户端的 WebSocket 从 sockets
中删除。
总结
在本文中,我们使用 Deno 和 Oak 框架来构建了一个简单的聊天应用程序,并详细介绍了如何处理 WebSocket 连接和构建一个聊天室。希望本文能够帮助读者更好地了解 Deno 和 Oak,并在实际开发中运用它们来构建更好的 Web 应用程序。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6614f5ccd10417a22253e8c1