Deno 中如何使用 TCP 和 UDP 协议?

阅读时长 8 分钟读完

简介

Deno 是一个新型的 JavaScript 运行时,与 Node.js 类似,但它更加现代化、安全,并且没有 npm 包管理器的依赖。它采用 Rust 编写,并且基于 V8 引擎。在 Deno 中,我们可以使用 TCP 和 UDP 协议来建立网络连接和处理网络数据。

本文将介绍如何在 Deno 中使用 TCP 和 UDP 协议,包括使用 Deno 标准库中的相关模块和编写代码。本文的目的是让读者能够了解 TCP 和 UDP 协议的基础知识,并且能够在 Deno 中使用这些协议建立网络连接和处理网络数据。

TCP

TCP 是一种面向连接的协议,它提供可靠的数据传输服务。在 TCP 协议下,数据被分成一个个数据包进行传输,每个数据包有一个顺序编号。它可以确保数据的完整性和正确性,以及保证数据传输的顺序。在传输过程中,TCP 还提供了流量控制和拥塞控制机制,可以避免网络拥塞和数据丢失。在 Deno 中,我们可以使用 Deno.listen()Deno.connect() 方法建立 TCP 连接。

服务器

在 Deno 中,我们可以使用 Deno.listen() 方法建立 TCP 服务器。该方法的参数为一个地址串,格式为 host:port,其中 host 表示服务器的地址,port 表示服务所在的端口。以下是一个简单的 TCP 服务器示例代码:

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

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

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

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

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

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

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

在上述代码中,我们使用 Deno.listen() 方法建立一个 TCP 服务器,然后使用 for await 循环来监听连接请求。在有新的连接请求时,我们调用 handleConn() 方法来处理连接。在 handleConn() 方法中,我们首先打印一个日志,表示有新的连接请求到来。然后我们使用 Uint8Array 创建一个缓冲区,用于接收客户端发送过来的数据。在循环读取数据过程中,我们判断读取的数据长度是否为 null,如果是则表示读取结束;否则,我们使用 TextDecoder 将缓冲区的数据转换成字符串,并打印到控制台中。最后,我们使用 TextEncoder 将数据 you said: ${msg} 发送给客户端,并继续循环等待客户端发送数据。

客户端

在 Deno 中,我们可以使用 Deno.connect() 方法建立 TCP 客户端连接。该方法的参数为一个地址串,格式为 host:port,其中 host 表示服务器的地址,port 表示服务所在的端口。以下是一个简单的 TCP 客户端示例代码:

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

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

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

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

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

在上述代码中,我们使用 Deno.connect() 方法建立一个 TCP 客户端连接,然后使用 TextEncoder 将字符串 hello, world 发送给服务器。在循环读取数据过程中,我们使用 Uint8Array 创建一个缓冲区,用于接收服务器发送过来的数据。在循环读取数据时,我们判断读取的数据长度是否为 null,如果是则表示读取结束;否则,我们使用 TextDecoder 将缓冲区的数据转换成字符串,并打印到控制台中。最后,我们关闭连接,释放资源。

UDP

UDP 是一种无连接的协议,它提供不可靠的数据传输服务。在 UDP 协议下,数据被分成一个个数据包进行传输,每个数据包都是独立的,没有编号。UDP 不提供对数据的可靠性控制和流量控制,因此它的速度更快,但传输的数据可能会丢失。在 Deno 中,我们可以使用 Deno.listenDatagram()Deno.connectDatagram() 方法建立 UDP 连接。

服务器

在 Deno 中,我们可以使用 Deno.listenDatagram() 方法建立 UDP 服务器。该方法的参数为一个地址串,格式为 host:port,其中 host 表示服务器的地址,port 表示服务所在的端口。以下是一个简单的 UDP 服务器示例代码:

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

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

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

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

在上述代码中,我们使用 Deno.listenDatagram() 方法建立一个 UDP 服务器,然后使用 while (true) 循环来监听连接请求。在收到客户端发送数据时,我们打印一个日志,表示有数据到来。然后我们使用 TextDecoder 将数据缓冲区的数据转换成字符串,并打印到控制台中。最后,我们使用 TextEncoder 将数据 you said: ${msg} 发送给客户端。

客户端

在 Deno 中,我们可以使用 Deno.connectDatagram() 方法建立 UDP 客户端连接。该方法的参数为一个地址串,格式为 host:port,其中 host 表示服务器的地址,port 表示服务所在的端口。以下是一个简单的 UDP 客户端示例代码:

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

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

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

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

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

在上述代码中,我们使用 Deno.connectDatagram() 方法建立一个 UDP 客户端连接,然后使用 TextEncoder 将字符串 hello, world 发送给服务器。在接收到服务器发送过来的数据时,我们使用 Uint8Array 创建一个缓冲区,用于接收服务器发送过来的数据。在接收到数据时,我们判断读取的数据长度是否为 null,如果是则表示读取结束;否则,我们使用 TextDecoder 将缓冲区的数据转换成字符串,并打印到控制台中。最后,我们关闭连接,释放资源。

总结

通过本文,我们了解了如何在 Deno 中使用 TCP 和 UDP 协议。使用 TCP 和 UDP 协议可以实现建立网络连接和处理网络数据,其中 TCP 提供可靠的数据传输服务,而 UDP 提供不可靠的数据传输服务。在使用这些协议时,我们需要了解它们的特点和使用方法,并且要遵循它们的规范。希望本文能够帮助读者更好地了解 TCP 和 UDP 协议,并且能够在 Deno 中使用它们,构建高效和安全的网络应用。

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

纠错
反馈