在 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