Deno 中使用 WebSocket 实现聊天室的方法

引言

WebSocket 是一种基于 TCP 协议实现的全双工通信协议,可以用于实时通信和数据传输。在现代 Web 开发中,WebSocket 被广泛应用于实现聊天室、实时通知、实时数据可视化等功能。在 Deno 中,WebSocket 也得到了良好的支持。本文将介绍如何在 Deno 中使用 WebSocket 实现聊天室。

WebSocket 简介

为了更好地理解 WebSocket,先来简单介绍一下它的原理和特点。在 HTTP 协议中,客户端通过向服务器发送请求获取服务器的响应。这种请求-响应模式是单向的,即客户端发送请求,服务器响应数据,请求结束。而在 WebSocket 中,客户端和服务器之间的通信是双向的,即客户端和服务器可以在一个连接上相互发送数据。在建立连接时,客户端和服务器会相互发送一些数据,建立起连接以后,客户端和服务器之间就可以交换数据,而不用每次都通过 HTTP 请求-响应的方式来传输数据。

Deno 中的 WebSocket

在 Deno 中,使用 WebSocket 可以实现如下几个步骤:

创建 WebSocket 服务

在 Deno 中,WebSocket 可以像 HTTP 服务一样创建。首先,我们需要创建一个 HTTP 服务,然后调用 accept() 方法来接受 WebSocket 连接。具体实现如下:

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

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

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

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

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

上面的代码创建了一个 HTTP 服务,监听 8080 端口。然后,当有 WebSocket 请求到达时,调用 acceptWebSocket() 方法来接受连接,接受成功后,调用 handleWebSocket() 方法来处理 WebSocket 消息。

处理 WebSocket 消息

handleWebSocket() 方法中,我们可以处理来自客户端的 WebSocket 消息和发送消息给客户端。具体实现如下:

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

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

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

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

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

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

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

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

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

上面的代码中,我们在 handleWebSocket() 方法中定义了一个 clients 数组,用来存储所有连接的客户端。当有新客户端连接时,将新客户端加入 clients 数组中。在处理来自客户端的 WebSocket 消息时,先打印消息内容,然后调用 broadcast() 方法来将消息广播给所有客户端。最后,在客户端断开连接时,将客户端从 clients 数组中删除。

向客户端发送消息

handleWebSocket() 方法中,我们可以调用 send() 方法来向客户端发送消息。具体实现如下:

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

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

  -- ---
-

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

上面的代码中,我们调用 client.send(msg) 方法来将消息发送给所有客户端。

实现聊天室

有了上面的基础,我们就可以很容易地实现一个简单的聊天室了。具体实现如下:

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

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

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

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

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

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

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

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

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

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

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

上面的代码中,我们向新客户端发送了一条欢迎消息,在处理来自客户端的消息时,将客户端的 IP 地址和消息内容拼接起来,并调用 broadcast() 方法将消息发送给其他客户端。在客户端断开连接时,也向其他客户端发送了一条离开消息。这样,一个简单的聊天室就实现了。

结论

本文介绍了如何在 Deno 中使用 WebSocket 实现聊天室,并给出了具体的代码实现。WebSocket 在现代 Web 开发中有着重要的应用,掌握 WebSocket 的基本实现方式是非常有必要的。通过本文的介绍,相信读者已经了解了如何在 Deno 中使用 WebSocket 实现聊天室,同时也可以将这些基础知识应用于自己的项目中。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6714e197ad1e889fe2161fdc