Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Crash when using with fastify-http-proxy websockets #314

Open
2 tasks done
msundvick opened this issue Jul 26, 2023 · 3 comments
Open
2 tasks done

Crash when using with fastify-http-proxy websockets #314

msundvick opened this issue Jul 26, 2023 · 3 comments

Comments

@msundvick
Copy link

Prerequisites

  • I have written a descriptive issue title
  • I have searched existing issues to ensure the bug has not already been reported

Fastify version

4.20.0

Plugin version

8.2.0

Node.js version

16.18.1

Operating system

Linux

Operating system version (i.e. 20.04, 11.3, 10)

22.04

Description

Adding both a websocket endpoint and a proxy to a websocket endpoint doesn't work. Error seems mostly the same as fastify/fastify-websocket#249. If I switch around the order I add the proxy and websocket endpoint, I can get it to log the error and continue instead of just crashing, but still doesn't work.

Error [ERR_INTERNAL_ASSERTION]: This is caused by either a bug in Node.js or incorrect usage of Node.js internals.
Please open an issue with this stack trace at https://github.com/nodejs/node/issues

    at new NodeError (node:internal/errors:387:5)
    at assert (node:internal/assert:14:11)
    at ServerResponse.assignSocket (node:_http_server:280:3)
    at Server.<anonymous> (/home/msundvick/Documents/simulator/sgpsim/node_modules/@fastify/http-proxy/index.js:91:19)
    at Server.emit (node:events:525:35)
    at Server.emit (node:domain:489:12)
    at onParserExecuteCommon (node:_http_server:772:14)
    at onParserExecute (node:_http_server:686:3) {
  code: 'ERR_INTERNAL_ASSERTION'
}

Steps to Reproduce

  const proxy = await import("@fastify/http-proxy");
  if (backend) {
    await fastify.register(proxy, {
      upstream: backend,
      prefix: "/api", // optional
      http2: false, // optional
      websocket: true,
    });
  }

  await fastify.register(require("@fastify/websocket"));
  fastify.register(async function (fastify) {
    fastify.get("/api2", { websocket: true }, (connection, req) => {});
  });

Expected Behavior

No response

@mcollina mcollina transferred this issue from fastify/fastify-websocket Jul 26, 2023
@mcollina
Copy link
Member

I've transfered this to fastify-http-proxy because that's where the core of the issue is.

@mcollina
Copy link
Member

Unfortunately @fastify/websocket and @fastify/http-proxy are incompatible. Long story short, they "plug" into the same event listener on the http server and must do different things to do their job.

Some reconciliation might be possible long term, but it's a significant amount of work that I do not have the bandwidth to take on. If anybody is willing, I would love to see this investigated and fixed.

fastify/fastify-websocket#249 was correctly fixed there, the problem relies on this module now.

@eze-nonso
Copy link

Unfortunately @fastify/websocket and @fastify/http-proxy are incompatible. Long story short, they "plug" into the same event listener on the http server and must do different things to do their job.

Some reconciliation might be possible long term, but it's a significant amount of work that I do not have the bandwidth to take on. If anybody is willing, I would love to see this investigated and fixed.

fastify/fastify-websocket#249 was correctly fixed there, the problem relies on this module now.

I could take this on, but I'd need more info on how this reconciliation should look like

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants