Deno 中如何使用 WebSocket 实现多人聊天室

阅读时长 6 分钟读完

什么是 Deno

Deno 是一种基于 V8 引擎的 TypeScript 运行时。它的目标是成为一个安全的脚本运行时环境,同时原生支持 TypeScript,同时也支持直接运行 JavaScript。相比 Node.js,Deno 采用自带标准库的设计,不再需要通过 npm 安装大量的第三方库。

WebSocket 简介

WebSocket 是基于 TCP 协议的一种全双工通信协议,它允许服务器主动向客户端推送消息,而无需通过客户端发起请求。因此,WebSocket 被广泛用于实现聊天室、实时消息推送等场景。

实现多人聊天室

接下来我们将使用 Deno 和 WebSocket 搭建一个简单的多人聊天室,它将支持多个用户在线聊天,任何一个用户发送的消息都将被广播给其他所有用户。

安装 WebSocket 相关库

在 Deno 中,我们使用标准库中的 ws 模块来提供 WebSocket 功能。我们可以在代码里直接引入这个模块:

开始 WebSocket 服务器

接下来,我们需要启动 WebSocket 服务器,并监听客户端的连接。其中,Deno 的标准库中提供了一个 serve() 函数来创建 HTTP 服务器,我们可以使用此函数来启动 WebSocket 服务器:

-- -------------------- ---- -------
----- ------ - ------- ----- ---- ---
------------------- ------- -- ---- -------

--- ----- ------ --- -- ------- -
    ----- - ----- -- ---------- -- ---------- ------- - - ----
    ----- ---- - --- ----------------
    ---------------- --------- -------------

    -- ----------
    --- ----- ------ -- -- ----- -
        -- ------- -- --- --------- -
            ----------------- --------
            --------------- ----
        - ---- -- --- ---------- ----------- -
            ------------------- ---- --------
        -
    -
-

这里我们使用 for await 循环来监听客户端的连接请求。对于每个连接请求,我们创建一个 WebSocket 对象来处理客户端的数据,并使用 broadcast 函数来将客户端发送的消息广播给其他所有客户端。

实现广播函数

广播函数可以将一个客户端发送的消息广播给其他所有客户端。我们可以将所有 WebSocket 对象存储在一个 Set 集合中,这样我们就可以很方便地对所有在线客户端进行遍历:

-- -------------------- ---- -------
----- ------- - --- -----------------

-------- ----------------- ---------- -------- ------- -
    --- ------ ------ -- -------- -
        -- ------- --- ------ -- ----------------- --- --------------- -
            ---------------------
        -
    -
-

这里我们判断除发送者以外的所有客户端是否已连接,并且是否处于开放状态。如果已连接,则将消息发送给客户端。

启动聊天室

最后,我们可以使用 Deno 的命令行工具来启动聊天室:

注意,我们需要使用 allow-net 权限来允许服务器监听网络连接。

完整代码

-- -------------------- ---- -------
------ - ---------- ----- - ---- ----------------------------------
------ - ----- -- ----------- - ---- ---------------------------------------

----- ------- - --- -----------------

-------- ----------------- ---------- -------- ------- -
    --- ------ ------ -- -------- -
        -- ------- --- ------ -- ----------------- --- --------------- -
            ---------------------
        -
    -
-

----- ------ - ------- ----- ---- ---
------------------- ------- -- ---- -------

--- ----- ------ --- -- ------- -
    ----- - ----- -- ---------- -- ---------- ------- - - ----
    ----- ---- - --- ----------------
    ---------------- --------- -------------

    ------------------

    -- ----------
    --- ----- ------ -- -- ----- -
        -- ------- -- --- --------- -
            ----------------- --------
            --------------- ----
        - ---- -- --- ---------- ----------- -
            ------------------- ---- --------
        -
    -

    ---------------------
-

总结

本文介绍了如何使用 Deno 和 WebSocket 来实现一个简单的多人聊天室。通过本文的学习,我们了解了如何使用 Deno 和标准库提供的 WebSocket 模块来创建 WebSocket 服务器,以及如何利用 Set 集合来存储在线客户端,并对所有客户端进行广播。希望本文能够帮助大家学习 Deno 实现 WebSocket 功能,同时也为大家提供一些聊天室设计实现的思路参考。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64e6f38cf6b2d6eab32492e0

纠错
反馈