Deno 中如何构建长连接服务器

阅读时长 6 分钟读完

在 Deno 这个比较新的运行时环境中,构建长连接服务器是一件很容易的事情。Deno 中有许多内置模块和第三方模块,可以轻松地实现和管理持久的连接。

前置知识

在开始构建长连接服务器之前,需要先知道以下几个概念:

  • TCP/IP协议
  • WebSocket协议
  • HTTP协议

构建 TCP 服务器

在 Deno 中,可以通过 Deno.listen() 方法来创建一个 TCP 服务器,如下所示:

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

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

在上面的代码中,我们通过 Deno.listen() 方法创建了一个服务器,并将其绑定到本地的 3000 端口上。然后,我们通过 for await 循环来监听客户端的连接请求。

针对每个连接请求,程序会创建一个新的协程,使用 await conn.read() 方法读取来自客户端的数据,并将读取到的数据进行打印输出。接着使用 await conn.write() 方法将 "Hello world\n" 返回给客户端。

构建 WebSocket 服务器

向客户端提供 WebSocket 服务,可以通过 std/ws/mod.ts 模块来实现:

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

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

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

在上面的代码中,我们通过 serve() 创建了一个 HTTP 服务器,并将其绑定到本地的 3000 端口上。然后,我们通过 acceptWebSocket() 来接收 WebSocket 客户端的连接请求。

每当有客户端连接成功后,我们就会收到一个 WebSocket 对象,然后对收到的消息(文本或二进制)进行处理并返回相同的内容给客户端。

构建 HTTP 长连接服务器

向客户端提供 HTTP 长连接服务,可以通过 oak 模块来实现:

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

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

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

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

在上面的代码中,我们通过 oak 模块创建一个 HTTP 服务器,并在请求处理中设置长连接。当发现客户端发来的请求体内容是 JSON 时,我们就确认它是一个开启长连接的请求,并给它返回一个表示开启连接成功的事件流的响应头(SSE)。

然后,在长连接的事件循环里面,可以模拟定时触发事件,将事件推送到客户端,从而实现 HTTP 长连接的效果。

总结

通过本文的介绍,我们可以看到,Deno 可以轻松地构建 TCP、WebSocket 和 HTTP 长连接服务器,同时它也支持许多其他的服务器端构建,例如 HTTP 和 HTTPS。这些操作都在轻松操作的API上实现,完全可以作为入门学习的指导,也可以作为更进一步的学习的挑战。

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

纠错
反馈