Deno 中 WebSocket 编程的基本知识

阅读时长 6 分钟读完

WebSocket 是一种在 Web 应用程序中实现双向通信的技术协议,它能够在不同的客户端和服务器之间传递消息。Deno 是一个基于 JavaScript 和 TypeScript 的运行时环境,它提供了与 Node.js 不同的 API 和模块加载系统。在 Deno 中,我们可以使用 WebSocket 实现一些令人兴奋的功能。在本文中,我将介绍 Deno 中 WebSocket 编程的基本知识,并提供示例代码。

WebSocket 的工作原理

在 Web 应用程序中,通常使用 HTTP 协议进行客户端和服务器之间的通信。HTTP 协议采用请求-响应模式,客户端发送请求给服务器,并等待服务器响应。这种模式适用于许多场景,但不适用于实时或双向通信。WebSocket 的出现改变了这种情况。它使用 HTTP 协议建立连接,之后通过 TCP/IP 协议在客户端和服务器之间建立双向通信通道。

下图是一个 WebSocket 连接的示意图:

在 WebSocket 协议中,首先需要进行握手(handshake)。该握手由客户端发送一个 HTTP 请求(通常称为“握手请求”)给服务器,该请求包含升级到 WebSocket 的标识符。如果服务器接受了该请求,它将返回一个类似于以下示例的 HTTP 响应:

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

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

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

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

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

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

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

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

在以上代码片段中,我们首先通过 serve 创建了一个 HTTP 服务器,并在循环中等待客户端连接。当收到客户端的连接请求时,我们使用 WebSocket.accept 方法接受连接,并创建一个 WebSocket 对象。接着,我们使用 for await of 循环监听事件,如果事件是字符串或二进制类型的消息,我们就会打印接收到的消息,并将其发送回客户端。如果事件是 ping 事件或关闭事件,我们会打印相关信息。最后,如果出现异常,我们会打印错误信息,并关闭连接。

以下代码演示了如何创建 WebSocket 客户端,并发送消息:

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

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

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

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

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

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

在以上代码片段中,我们首先创建了一个 WebSocket 对象,并指定了连接 URL 和协议。接着,我们监听 onopen 事件,在连接建立后向服务器发送消息。在 onmessage 事件中,我们打印接收到的消息。如果 WebSocket 连接关闭,我们会监听 onclose 事件,并打印相关信息。

总结

本文介绍了 Deno 中 WebSocket 编程的基本知识,以及如何使用标准库中的 WebSocket 类创建 WebSocket 服务器和客户端。WebSocket 协议提供了一种实时或双向通信的机制,它能够在不同的客户端和服务器之间传递消息。借助 WebSocket,我们可以构建一些令人兴奋的应用程序,例如聊天室、多人在线游戏等。如果您还没有尝试过 Deno 和 WebSocket 编程,建议您动手试试,并开发您自己的应用程序。

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

纠错
反馈