簡體   English   中英

通過 TCP 網絡接收數據時動態調整大小的 Uint8Array

[英]Dynamically sized Uint8Array when receiving data over TCP network

我已經成功構建了一個簡單的 TCP 服務器,這是我的代碼:

const server = Deno.listen({ port:3000 })

for await (const conn of server) {
  let d = new Uint8Array(1024)

  await conn.read(d)

  console.log(d)
}

這很好用,在某些時候,這不是一個大問題。 但是我不想手動設置 Uint8Array 大小並按從conn.read()收到的長度對 uint8array 進行切片。

有什么辦法可以解決這個問題嗎?

conn.read()接收的動態大小的 Uint8Array

兩種方式:

迭代ReadableStream

const server = Deno.listen({ port: 3000 });

for await (const conn of server) {
  (async () => {
    const byteArr: number[] = [];
    for await (const chunk of conn.readable) byteArr.push(...chunk);
    const u8Arr = new Uint8Array(byteArr);
  })();
}

使用readAll中的deno.land/std

import { readAll } from "https://deno.land/std@0.149.0/streams/conversion.ts";

const server = Deno.listen({ port: 3000 });

for await (const conn of server) {
  (async () => {
    const u8Arr = await readAll(conn);
  })();
}

您可以閱讀Buffer#readFrom的源代碼以了解readAll如何在內部進行操作。

請務必閱讀手冊頁HTTP Server APIs (low level) | 手冊 | Deno ,因為它涵蓋了您似乎正在探索/詢問的很多內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM