什么是 Deno
Deno 是一种基于 V8 引擎的 TypeScript 运行时。它的目标是成为一个安全的脚本运行时环境,同时原生支持 TypeScript,同时也支持直接运行 JavaScript。相比 Node.js,Deno 采用自带标准库的设计,不再需要通过 npm 安装大量的第三方库。
WebSocket 简介
WebSocket 是基于 TCP 协议的一种全双工通信协议,它允许服务器主动向客户端推送消息,而无需通过客户端发起请求。因此,WebSocket 被广泛用于实现聊天室、实时消息推送等场景。
实现多人聊天室
接下来我们将使用 Deno 和 WebSocket 搭建一个简单的多人聊天室,它将支持多个用户在线聊天,任何一个用户发送的消息都将被广播给其他所有用户。
安装 WebSocket 相关库
在 Deno 中,我们使用标准库中的 ws 模块来提供 WebSocket 功能。我们可以在代码里直接引入这个模块:
import { WebSocket, serve } from "https://deno.land/std/ws/mod.ts"; import { serve as serveStatic } from "https://deno.land/std/http/server.ts";
开始 WebSocket 服务器
接下来,我们需要启动 WebSocket 服务器,并监听客户端的连接。其中,Deno 的标准库中提供了一个 serve() 函数来创建 HTTP 服务器,我们可以使用此函数来启动 WebSocket 服务器:
-- -------------------- ---- ------- ----- ------ - ------- ----- ---- --- ------------------- ------- -- ---- ------- --- ----- ------ --- -- ------- - ----- - ----- -- ---------- -- ---------- ------- - - ---- ----- ---- - --- ---------------- ---------------- --------- ------------- -- ---------- --- ----- ------ -- -- ----- - -- ------- -- --- --------- - ----------------- -------- --------------- ---- - ---- -- --- ---------- ----------- - ------------------- ---- -------- - - -
这里我们使用 for await 循环来监听客户端的连接请求。对于每个连接请求,我们创建一个 WebSocket 对象来处理客户端的数据,并使用 broadcast 函数来将客户端发送的消息广播给其他所有客户端。
实现广播函数
广播函数可以将一个客户端发送的消息广播给其他所有客户端。我们可以将所有 WebSocket 对象存储在一个 Set 集合中,这样我们就可以很方便地对所有在线客户端进行遍历:
-- -------------------- ---- ------- ----- ------- - --- ----------------- -------- ----------------- ---------- -------- ------- - --- ------ ------ -- -------- - -- ------- --- ------ -- ----------------- --- --------------- - --------------------- - - -
这里我们判断除发送者以外的所有客户端是否已连接,并且是否处于开放状态。如果已连接,则将消息发送给客户端。
启动聊天室
最后,我们可以使用 Deno 的命令行工具来启动聊天室:
deno run --allow-net chatroom.ts
注意,我们需要使用 allow-net 权限来允许服务器监听网络连接。
完整代码
-- -------------------- ---- ------- ------ - ---------- ----- - ---- ---------------------------------- ------ - ----- -- ----------- - ---- --------------------------------------- ----- ------- - --- ----------------- -------- ----------------- ---------- -------- ------- - --- ------ ------ -- -------- - -- ------- --- ------ -- ----------------- --- --------------- - --------------------- - - - ----- ------ - ------- ----- ---- --- ------------------- ------- -- ---- ------- --- ----- ------ --- -- ------- - ----- - ----- -- ---------- -- ---------- ------- - - ---- ----- ---- - --- ---------------- ---------------- --------- ------------- ------------------ -- ---------- --- ----- ------ -- -- ----- - -- ------- -- --- --------- - ----------------- -------- --------------- ---- - ---- -- --- ---------- ----------- - ------------------- ---- -------- - - --------------------- -
总结
本文介绍了如何使用 Deno 和 WebSocket 来实现一个简单的多人聊天室。通过本文的学习,我们了解了如何使用 Deno 和标准库提供的 WebSocket 模块来创建 WebSocket 服务器,以及如何利用 Set 集合来存储在线客户端,并对所有客户端进行广播。希望本文能够帮助大家学习 Deno 实现 WebSocket 功能,同时也为大家提供一些聊天室设计实现的思路参考。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64e6f38cf6b2d6eab32492e0