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

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions