Skip to content

NapiServer times out in 30 seconds #219

Description

@guest271314

(Node.js WebTransport via NAPI-RS)

Steps to reproduce:

moq-web-transport-node-server-client-test.js

import * as moqWebTransportNode from "@moq/web-transport"; 
// bun build --target=node ./node_modules/@moq/web-transport/src/index.ts --outdir=moq-wt-node-bundle
// import * as moqWebTransportNode from "./moq-wt-node-bundle/index.js";
import { readFileSync } from "node:fs";

const cert = readFileSync("./cert.pem");
const key = readFileSync("./key.pem");
const encoder = new TextEncoder();
let now;
// moqWebTransportNode.install();
globalThis.WebTransport = moqWebTransportNode.default;
const server = moqWebTransportNode.NapiServer.bind("127.0.0.1:8080", cert, key)
  .accept().then(
    async (napiRequest) => {
      // napiRequest.url is a Promise? Why?
      // console.log(await napiRequest.url);
      const napiSession = await napiRequest.ok();
      return new WebTransport(napiSession);
    },
  );

server.then(async (clientSession) => {
  await clientSession.ready;
  const { readable: serverReadable, writable: serverWritable } =
    clientSession.datagrams;
  serverReadable.pipeThrough(new TextDecoderStream())
    .pipeThrough(
      new TransformStream({
        transform(value, controller) {
          console.log(`Received value from WebTransport client: ${value}`);
          controller.enqueue(value.toUpperCase());
        },
      }),
    ).pipeThrough(new TextEncoderStream()).pipeTo(serverWritable);
});

const client = new WebTransport("https://127.0.0.1:8080", {
  serverCertificateDisableVerify: true,
});

await client.ready;

client.closed.then(({ closeCode, reason }) => {
  console.log({ closeCode, reason });
  // Server (?) times out and exits in 30 seconds?
  console.log((performance.now() - now) / 1000);
}).catch((e) => {
  console.log(e.stack);
  console.trace();
});

const { readable: clientReadable, writable: clientWritable } = client.datagrams;

const clientWriter = clientWritable.getWriter();
clientReadable.pipeThrough(new TextDecoderStream()).pipeTo(
  new WritableStream({
    write(value) {
      console.log(`Received value from WebTransport server: ${value}`);
      now = performance.now();
    },
  }),
).catch((e) => {
  console.log(e.stack);
  console.trace();
});

clientWriter.write(encoder.encode("test"));
$ bun moq-web-transport-node-server-client-test.js
Received value from WebTransport client: test
Received value from WebTransport server: TEST
{
  closeCode: 0,
  reason: "connection error: timed out",
}
30.018914800999998

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions