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

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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