WebSocket 是一种在 Web 应用程序中实现双向通信的技术协议,它能够在不同的客户端和服务器之间传递消息。Deno 是一个基于 JavaScript 和 TypeScript 的运行时环境,它提供了与 Node.js 不同的 API 和模块加载系统。在 Deno 中,我们可以使用 WebSocket 实现一些令人兴奋的功能。在本文中,我将介绍 Deno 中 WebSocket 编程的基本知识,并提供示例代码。
WebSocket 的工作原理
在 Web 应用程序中,通常使用 HTTP 协议进行客户端和服务器之间的通信。HTTP 协议采用请求-响应模式,客户端发送请求给服务器,并等待服务器响应。这种模式适用于许多场景,但不适用于实时或双向通信。WebSocket 的出现改变了这种情况。它使用 HTTP 协议建立连接,之后通过 TCP/IP 协议在客户端和服务器之间建立双向通信通道。
下图是一个 WebSocket 连接的示意图:
在 WebSocket 协议中,首先需要进行握手(handshake)。该握手由客户端发送一个 HTTP 请求(通常称为“握手请求”)给服务器,该请求包含升级到 WebSocket 的标识符。如果服务器接受了该请求,它将返回一个类似于以下示例的 HTTP 响应:
-- -------------------- ---- ------- -------- --------- ----------- ------- --------------------- ------------------------------- ------------- --------- --------------------- --------- ------------ -------------------------------------------------------------------------------------------------------------------------------------------- -- ---- -- --------- --- - ---- ----------- ------------- --- --------- ------- ----------- --------------------- --------- ---- ------------- ------ - ----- - ---- --------------------------------------- ------ - ---------- ----------------- ---------------------- --------------------- - ---- ---------------------------------- ----- ---- - ----- ----- -------- ---------------- - - --------- ------------- -- ----- ------ - ------- ---- --- ---------------------- ------ ------- -- ---- ---------- --- ----- ------ --- -- ------- - ----- - -------- ---- - - ---- ----- -- - ----- ---------------------- ---------------------- ------ ------------ --- - --- ----- ------ -- -- --- - -- ------- -- --- --------- - --------------------- ------ -------- -------- ----- ----------------- ------ -------- -------- - ---- -- --- ---------- ----------- - --------------------- ------ -------- -------- ----- ----------------- ------ -------- -------- - ---- -- -------------------------- - --------------------- ---- -------- - ---- -- --------------------------- - ---------------------- --------- - - - ----- ------- - --------------------- -- ------- ------ ----------- -- -------------- - ----- ------------------------------------ - - -
在以上代码片段中,我们首先通过 serve
创建了一个 HTTP 服务器,并在循环中等待客户端连接。当收到客户端的连接请求时,我们使用 WebSocket.accept
方法接受连接,并创建一个 WebSocket 对象。接着,我们使用 for await of
循环监听事件,如果事件是字符串或二进制类型的消息,我们就会打印接收到的消息,并将其发送回客户端。如果事件是 ping 事件或关闭事件,我们会打印相关信息。最后,如果出现异常,我们会打印错误信息,并关闭连接。
以下代码演示了如何创建 WebSocket 客户端,并发送消息:
-- -------------------- ---- ------- ------ - --------- - ---- ---------------------------------- ----- --- - ---------------------- ----- -- - --- -------------- --------------- --------- - -- -- - ---------------------- --------- -- --------- --------------- ---------- -- ------------ - ---- -- - --------------------- -------- ------------- -- ---------- - -- -- - ---------------------- --------- -- ---------- - ------- -- - ------------------------ ------ ------------------- --
在以上代码片段中,我们首先创建了一个 WebSocket 对象,并指定了连接 URL 和协议。接着,我们监听 onopen
事件,在连接建立后向服务器发送消息。在 onmessage
事件中,我们打印接收到的消息。如果 WebSocket 连接关闭,我们会监听 onclose
事件,并打印相关信息。
总结
本文介绍了 Deno 中 WebSocket 编程的基本知识,以及如何使用标准库中的 WebSocket
类创建 WebSocket 服务器和客户端。WebSocket 协议提供了一种实时或双向通信的机制,它能够在不同的客户端和服务器之间传递消息。借助 WebSocket,我们可以构建一些令人兴奋的应用程序,例如聊天室、多人在线游戏等。如果您还没有尝试过 Deno 和 WebSocket 编程,建议您动手试试,并开发您自己的应用程序。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/645b44c3968c7c53b0d9ddfc