简介
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