WebSocket 是一种网络协议,用于实现客户端与服务器之间的实时通信,类似于 HTTP。Deno 是一个现代的 JavaScript 和 TypeScript 运行时环境,内置了 WebSocket API,可以方便地使用 WebSocket 进行开发。
本文将介绍如何在 Deno 中使用 WebSocket API,包括如何创建 WebSocket 服务器、如何监听客户端请求、如何发送数据以及如何处理错误等内容。有了这些知识,你就可以使用 WebSocket 在 Deno 中开发实时应用程序了。
创建 WebSocket 服务器
在 Deno 中创建 WebSocket 服务器非常简单,只需要创建一个 HTTP 服务器并将其升级为 WebSocket 服务器即可:
-- -------------------- ---- ------- ------ - ----- - ---- --------------------------------------- ------ - ---------------- ---------------------- --------------------- ---------- - ---- ---------------------------------- ----- ------ - ------- ----- ---- --- ---------------------- -- ------------------------- --- ----- ------ --- -- ------- - -- -------- --- ------ - ----- - ----- -- ---------- -- ---------- ------- - - ---- ----------------- ----- ---------- ---------- -------- -- ---------------------- ------------ -- --------------------- -- ------ ---------- ---------- - ---- - ------------- ------- ---- ----- - --------- ----- ------ ------ ---------------- --------------- -------- ----- ------ - --- ------------------------------------ ------------- - -- -- ---------------------- -------------- - -- -- ---------------------- ---------------- - ------- -- ------------------------ ------------------ ---- --------- --------- ------- ------ ------------- ------------ ------- ------- -- --- - - ----- -------- ------------------- ---------- - --------------------- ------------ --- - --- ----- ------ -- -- --- - -- ------- -- --- --------- - ------------------------ ---- ----- -------------- -------- - ---- -- --- ---------- ----------- - --------------------- --------- ---- - ---- -- -------------------------- - ----- -- ----- - --- -------------------- ------ - ---- -- --------------------------- - ----- - ----- ------ - - --- ---------------------- ----- -------- - - - ----- ----- - --------------------- -- ------- ------ --------- -- -------------- - ----- ------------------------------------ - - -
该代码将创建一个 WebSocket 服务器和一个 HTTP 服务器,并将其绑定到本地的 8000 端口上。当 HTTP 请求的 URL 为 /ws
时,处理 WebSocket 请求。否则,返回一个包含 WebSocket 客户端的 HTML 页面。
监听客户端请求
Deno 的 WebSocket API 具有响应式编程的特点,可以通过 for await
循环监听客户端请求,并处理相关事件,如 message
、ping
和 close
。
在上面的示例代码中,handleWebSocket
函数用于处理 WebSocket 请求。该函数使用一个 for await
循环来监听客户端请求,并通过 isWebSocketCloseEvent
、isWebSocketPingEvent
和 typeof ev === "string"
等条件来区分不同类型事件。然后,根据事件类型,处理相应的逻辑,如打印日志、发送响应等。
-- -------------------- ---- ------- ----- -------- ------------------- ---------- - --------------------- ------------ --- - --- ----- ------ -- -- --- - -- ------- -- --- --------- - ------------------------ ---- ----- -------------- -------- - ---- -- --- ---------- ----------- - --------------------- --------- ---- - ---- -- -------------------------- - ----- -- ----- - --- -------------------- ------ - ---- -- --------------------------- - ----- - ----- ------ - - --- ---------------------- ----- -------- - - - ----- ----- - --------------------- -- ------- ------ --------- -- -------------- - ----- ------------------------------------ - - -
发送数据
Deno 的 WebSocket API 提供了 WebSocket#send
方法,用于向客户端发送数据。在上面的示例代码中,当收到客户端发送的字符串时,使用 WebSocket#send
方法将字符串回显给客户端。
if (typeof ev === "string") { console.log("received:", ev); await ws.send(`echo: ${ev}`); }
处理错误
在网络编程中,很容易遇到各种错误,例如客户端断开连接、网络故障等。为了保证程序的健壮性,需要及时处理这些错误。
在上面的示例代码中,如果出现异常,会将异常日志打印到控制台,并发送一个状态码为 1000 的关闭帧到客户端。这样可以保证客户端与服务器正常断开连接,避免出现不必要的错误。
} catch (err) { console.error(`failed to receive frame: ${err}`); if (!ws.isClosed) { await ws.close(1000).catch(console.error); } }
总结
本文介绍了如何在 Deno 中使用 WebSocket API,包括如何创建 WebSocket 服务器、如何监听客户端请求、如何发送数据以及如何处理错误等内容。WebSocket 是一种实时通信协议,可以广泛应用于实时应用程序的开发中,例如聊天室、游戏、股票行情等。Deno 的 WebSocket API 简单易用,对于前端开发者来说是一种非常不错的选择。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64dd7a8ff6b2d6eab38ab9fb