Deno 中使用 WebSocket 进行双向通信

WebSocket 是一种在 Web 应用程序中实现双向通信的技术,它可以在客户端和服务器之间实现实时的数据传输,而无需使用 AJAX 和轮询等方式。

Deno 是一款现代的 JavaScript/TypeScript 运行时,旨在解决 Node.js 的一些问题,并提供更好的安全性。在 Deno 中使用 WebSocket 实现双向通信非常简单,并且可以轻松地构建实时应用程序。

WebSocket 原理介绍

WebSocket 是一种基于 TCP 协议的协议,它通过 HTTP 协议进行握手,然后在客户端和服务器之间建立一条持久化的连接,实现双向通信,数据传输的格式是二进制格式。

WebSocket 的通信过程分为三个步骤:

  1. 建立连接:客户端向服务器发出 WebSocket 握手请求,服务器回复握手确认。
  2. 数据传输:一旦握手成功,客户端和服务器之间就可以开始传输数据,数据是通过帧(frame)的形式传输的。
  3. 断开连接:当客户端或服务器需要终止连接时必须发送关闭帧。

Deno 中使用 WebSocket 实现双向通信

在 Deno 中,我们可以使用标准的 JavaScript API 来创建 WebSocket 服务和客户端。下面是一个简单的示例代码:

// WebSocket 服务器
import { serve } from 'https://deno.land/std/http/server.ts';
import { acceptWebSocket, WebSocket } from 'https://deno.land/std/ws/mod.ts';

const server = serve({ port: 8080 });

console.log('WebSocket server started at ws://localhost:8080');

for await (const req of server) {
  if (req.url === '/ws') {
    const { conn, r: bufReader, w: bufWriter, headers } = req;
    acceptWebSocket({
      conn,
      bufReader,
      bufWriter,
      headers,
    })
      .then(handleWebSocket)
      .catch((err) => console.error(`Failed to accept WebSocket: ${err}`));
  } else {
    req.respond({ status: 404 });
  }
}

// WebSocket 处理函数
async function handleWebSocket(webSocket: WebSocket) {
  console.log('WebSocket connection established');

  for await (const message of webSocket) {
    console.log(`WebSocket message received: ${message}`);
    if (typeof message === 'string') {
      webSocket.send(`Echoing back: ${message}`);
    } else if (message instanceof Uint8Array) {
      webSocket.send(message);
    }
  }

  console.log('WebSocket connection closed');
}

// WebSocket 客户端
const socket = new WebSocket('ws://localhost:8080/ws');

socket.addEventListener('open', (event) => {
  console.log('WebSocket connection established');

  // 发送消息到服务器
  socket.send('Hello, WebSocket!');
});

socket.addEventListener('message', (event) => {
  console.log(`WebSocket message received: ${event.data}`);
});

socket.addEventListener('close', (event) => {
  console.log('WebSocket connection closed');
});

总结

WebSocket 提供了一种简单而实用的方法来实现双向通信,它可以在客户端和服务器之间实现实时的数据传输,而无需使用 AJAX 和轮询等方式。在 Deno 中使用 WebSocket 实现双向通信非常简单,并且可以轻松地构建实时应用程序。通过本文的学习,相信读者已经掌握了 WebSocket 的基本原理和在 Deno 中实现双向通信的方法。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65914670eb4cecbf2d67b07a


纠错
反馈