介绍
Deno是由Node.js的创建者Ryan Dahl打造的下一代JavaScript运行时环境。与Node.js相比,它有更好的标准模块支持、更安全的代码执行和良好的TypeScript支持。
在Deno中,我们可以使用std模块来实现Socket编程。本文将介绍Deno中的基本Socket编程知识,并提供示例代码。
创建一个 TCP 服务器
在Deno中,我们可以使用Deno.listen()
方法创建一个TCP服务器。Deno.listen()
方法接受一个ListenOptions
对象作为参数,该对象包含一个对象属性port
来指定服务器端口。下面是一个创建TCP服务器的基本示例:
import { serve } from "https://deno.land/std/http/server.ts"; const server = serve({ port: 8080 }); console.log("Server is running on port 8080"); for await (const req of server) { req.respond({ body: "Hello World\n" }); }
在上面的示例中,我们使用了serve()
方法创建了一个TCP服务器,该方法返回一个可迭代的异步迭代器。我们可以使用for await ... of
语句来迭代这个迭代器,每当有客户端请求时,它就会返回一个请求对象。我们可以使用respond()
方法来返回响应,示例代码中我们简单地返回了一个Hello World字符串,并用\n
来表示新的一行。
创建一个 TCP 客户端
在Deno中,我们可以使用Deno.connect
方法来创建一个TCP客户端。Deno.connect()
方法需要一个对象参数,该对象由以下属性组成:
hostname
: 远程服务器的主机名。port
: 远程服务器的端口。options
: 可选属性,用于指定通信协议。
下面是一个创建TCP客户端的基本示例:
-- -------------------- ---- ------- ------ - --------- - ---- ------------------------------------ ------ - --------------- - ---- ----------------------------------------- ----- ---- - ----- -------------- --------- ------------ ----- ---- --- ----- ------- - ---- - ----------------- ------------------------ ----- -------------- ------------------------------- ----- ------- - --- -------------- ----- --------- - --- ---------------- ----- ---------- - ----- --------------------- ------------------------ -------------
在上面的示例中,我们使用了Deno.connect()
方法创建了一个TCP客户端并连接到服务器。然后,我们构造了一个HTTP GET请求,并使用conn.write()
方法将请求数据写入连接。接着,我们使用BufReader
创建一个可读取的缓冲区,使用TextProtoReader
读取连接并解析响应。最后,我们输出了响应行并关闭连接。
创建一个 UDP 服务器
在Deno中,我们可以使用Deno.listenDatagram
方法创建一个UDP服务器。与TCP服务器不同的是,UDP服务器可以同时接收多个客户端的数据。
下面是一个创建UDP服务器的基本示例:
-- -------------------- ---- ------- ----- ---- - - --------- ---------- ----- ---- -- ----- ------- - -------------------------- ---------------- ------ -- ------- -- ---- ------- --- ----- ------ ----- ------ -- -------- - ---------------- ------- ---- -------------------------------- --------- ----------------- ------- -
在上面的示例中,我们使用了Deno.listenDatagram()
方法创建了一个UDP服务器,并使用for await ... of
语句来迭代udpConn
返回的迭代器。每当有客户端发送数据到服务器时,它就会返回一个[msg, rinfo]
元组。在这个元组中,msg
表示客户端发送的数据,rinfo
包含了客户端的地址和端口。我们可以使用udpConn.send()
方法将数据发送回客户端。
创建一个 UDP 客户端
在Deno中,我们可以使用Deno.connectDatagram()
方法创建一个UDP客户端,并使用conn.send()
方法将数据发送到指定的地址和端口。
下面是一个创建UDP客户端的基本示例:
-- -------------------- ---- ------- ----- ---- - - --------- ------------ ----- ---- -- ----- ---- - --------------------------- ----- ------- - --- ---------------------------- --- ---------- ----- ------------------- ----- ------ - --- ----------------- ----- - - ----- --------------------- ----- -------- - --- --------------------------------------- ---- ---------------------- -------------
在上面的示例中,我们使用了Deno.connectDatagram()
方法创建了一个UDP客户端,并使用conn.send()
方法将字符串转换为字节数组并发送到服务器。然后,我们使用conn.receive()
方法接收服务器发回的数据,并使用TextDecoder
解码收到的数据。最后,我们输出了服务器发回的响应并关闭连接。
总结
在本文中,我们介绍了Deno中的基本Socket编程知识,并提供了示例代码。使用Denos的std模块,我们可以轻松地编写TCP和UDP服务器和客户端,并实现各种网络应用程序。如果你正在Deno中编写网络应用程序,Socket编程是必不可少的技能。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64577100968c7c53b0a243fa