概述
WebSocket 是用于在客户端和服务器之间建立双向实时通信通道的协议。Deno 是一个安全的 JavaScript/TypeScript 运行时环境。本文将介绍如何在 Deno 中使用 WebSocket 实现多人聊天室功能。
WebSocket 基础
WebSocket API 包含在 Deno 标准库中。客户端和服务器可以通过以下代码创建一个 WebSocket 连接:
const ws = new WebSocket('ws://localhost:8080');
WebSocket 服务器需要监听 connection
事件,并通过该事件在客户端之间传递消息。以下是一个简单的 WebSocket 服务器实现:
-- -------------------- ---- ------- ------ - ----- - ---- --------------------------------------- ------ - ----------- --------------- - ---- ---------------------------------- ----- ------ - ------- ----- ---- --- ------------------- ------- -- ---- ------- --- ----- ------ --- -- ------- - -- ----------- --- ----- -- ---------------- - ----------------- ----- --------- ---------- ------ ---------- ------ -------- ------------ -- ---------------------- ---------------------- - - ----- -------- ----------------------- ---------- - -- ---- -
在 handleWebSocket
函数中,我们可以处理收到的消息并将其发送回客户端。以下是一个简单的处理函数,将从某个客户端收到的消息广播给其他客户端:
-- -------------------- ---- ------- ----- -------- ----------- - --- ----- -------- ----------------------- ---------- - --------------------- --- ----- ------ ----- -- ------- - -- ------- ----- --- --------- - --- ------ ------ -- -------- - -- ------- --- ------ -- ----------------- --- --------------- - ------------------- - - - - --------------------------------------- --- -
以上代码将每个新连接推送到 clients
数组中,并对每个连接上的 string
消息进行广播。在 for await
循环中处理消息,并且在收到一个关闭事件时,从 clients
数组中删除该连接。
实现聊天室
我们使用 ES6 class
语法来实现聊天室类,该类将扩展 WebSocket 类。聊天室需要处理以下事件:
connection
: 一个新连接时触发,将其推送到clients
数组中。message
: 接收到一个消息时触发,在聊天室中广播该消息。close
: 断开连接时触发,将其从clients
数组中删除。
-- -------------------- ---- ------- ----- -------- ------- --------- - -------- ----------- - --- -------------------- ------ - --- - ----------------- - --------------- ----------------------------------- ---------------------------------- -------------------------------- ------------------------------- ------------------------------ ----------------------------- - ----- ----------------------- -------------------------------- - ----- - ------ - - ------ -------------------------- - ----- -------------------- ----------------------------- - ----- - ----- ------ - - ------ -- ------- ---- --- --------- - --- ------ ------ -- ------------- - -- ------- --- ------ -- ----------------- --- --------------- - ------------------ - - - - ----- ------------------ --------------------------- - ----- - ------ - - ------ ------------------------------------------------- --- - -
现在我们可以将此类用作 WebSocket 服务器的事件处理程序。以下是使用 ChatRoom
类的完整服务器实现:
-- -------------------- ---- ------- ------ - ----- - ---- --------------------------------------- ------ - ---------------- ---------- - ---- ---------------------------------- ----- ------ - ------- ----- ---- --- ------------------- ------- -- ---- ------- --- ----- ------ --- -- ------- - -- ----------- --- ----- -- ---------------- - ----------------- ----- --------- ---------- ------ ---------- ------ -------- ------------ -- -------------- -- - ----- ---- - --- ----------------- -- ---------------------- - - ----- -------- ------- --------- - -------- ----------- - --- -------------------- --------- - ----------------- - --------------- ----------------------------------- ---------------------------------- -------------------------------- ------------------------------- ------------------------------ ----------------------------- - ----- ----------------------- -------------------------------- - ----- - ------ - - ------ -------------------------- - ----- -------------------- ----------------------------- - ----- - ----- ------ - - ------ -- ------- ---- --- --------- - --- ------ ------ -- ------------- - -- ------- --- ------ -- ----------------- --- --------------- - ------------------ - - - - ----- ------------------ --------------------------- - ----- - ------ - - ------ ------------------------------------------------- --- - -
结论
在 Deno 中使用 WebSocket 实现多人聊天室非常简单。只需使用 WebSocket API 和我们编写的聊天室类即可。通过使用该示例代码,你可以轻松开始构建自己的实时应用程序,如聊天室、实时评论等。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6706199bd91dce0dc8583c69