WebSocket 是一种基于 TCP 连接的协议,可以在客户端和服务器之间进行实时通信。在前端开发中,我们经常需要使用 WebSocket 去实现一些实时性较强的功能,例如聊天室、通知提醒等。而在 Deno 环境下,我们同样可以使用 WebSocket 来实现这些功能。
安装 WebSocket
在 Deno 中,我们可以通过 std/ws
模块来使用 WebSocket。安装方式如下:
deno install --allow-net --unstable https://deno.land/std/ws/mod.ts
该命令将会安装 std/ws
模块,并把该模块注册到 Deno 的模块缓存中。
创建 WebSocket 服务器
在 Deno 中创建 WebSocket 服务器的方法和创建 HTTP 服务器是类似的。我们可以使用 serve()
函数来创建 WebSocket 服务器。
-- -------------------- ---- ------- ------ - ----- - ---- --------------------------------------- ------ - ----------- --------------- - ---- ---------------------------------- ----- ------ - ------- ----- ---- --- ----------------------- ------- ------------------------- --- ----- ------ --- -- ------- - -- ----------- --- ----- -- ------- --- ------ - -- ----------------- - ----------------- ----- --------- ---------- ------ ---------- ------ -------- ------------ -- ---------------------- ---------- -- ----------------------- -------- ---- - - - ----- -------- ------------------- ----------- ------------- - ----------------------- ------------- --- ----- ------ --- -- --- - ----------------------- ---------- ----- -- ------- --- --- --------- - --------------- --------- - ---- -- ---- ---------- ----------- - ------------- - - -
在以上代码中,我们首先创建了一个 HTTP 服务器,并监听端口号 3000
。接着,我们通过 acceptable()
函数来判断当前的请求是否是一个 WebSocket 请求。如果是 WebSocket 请求,我们就通过 acceptWebSocket()
函数来接受该请求,并创建一个 WebSocket 对象。
在创建 WebSocket 对象之后,我们就可以通过 for await
循环来监听该 WebSocket 对象的消息,并对消息进行处理。在这个示例中,我们简单地对消息进行了回显。
创建 WebSocket 客户端
在 Deno 中创建 WebSocket 客户端也非常简单。我们可以使用 WebSocket
类来创建一个 WebSocket 对象,并连接到 WebSocket 服务器。
-- -------------------- ---- ------- ----- -- - --- ------------------------------------ --------- - -- -- - ----------------------- ------------- -------------- ------------ -- ------------ - ------- -- - ----------------------- ---------- ------------ -- ---------- - -- -- - ----------------------- ---------- --
在以上代码中,我们创建了一个 WebSocket 对象,并通过 ws.onopen
事件来监听 WebSocket 的连接事件。一旦连接建立成功,我们就可以通过 ws.send()
函数来向服务器发送消息。当服务器接收到消息时,就会通过 ws.onmessage
事件来回调到客户端,并用日志输出收到的消息。
最后,我们还需要监听 ws.onclose
事件来判断 WebSocket 被关闭的情况。
总结
WebSocket 的出现虽然代替不了 HTTP,但是它在一些需要实时交互、连续性较强的场景下表现非常出色。在 Deno 环境下,我们可以使用 std/ws
模块来简单地创建 WebSocket 服务器和客户端,并做到实时通信。
需要注意的是,WebSocket 消息的收发是实时的,同时如果需要跨域传输,需要在服务端进行相关 CORS 设置。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6493b54248841e989415168f