r19 icon indicating copy to clipboard operation
r19 copied to clipboard

feat: only one process for the server

Open aheissenberger opened this issue 10 months ago • 4 comments

Hi Rafael,

you did an amazing job in getting this working!!

Have a look at my changes to your rss.ts and rsc.ts which allow to only have one running process and bun.serve as the http server: https://github.com/aheissenberger/r19/tree/bon-one-server

The new server is in ssr-bun.ts. Pages can be build with bun run bunbuild and then starte the server with bun start

  • the plugin rsc-conditions-plugin will include the rsc-bun.rsc.ts file with the condition react-server
  • the bun.serve only needs one port and uses the parameter ?__RSA to return rsc json code

problems:

  • homepage need to be loaded twice to show center component - have not found the reason for TypeError: Expected Sink on first call - fixed it with removing streaming
  • not pre-rendered static pages as the error will break the homepage

next planned steps:

  • [ ] code cleanup
  • [X] remove the need for the extra build step for the pages
  • [X] add hot reloading of the html
  • [ ] replace bun.serve with Hono to allow easy deployment to different providers

aheissenberger avatar Apr 19 '24 01:04 aheissenberger

Hmm, that’s really, really interesting. I had not thought about a bun plugin to apply the conditions for the framework itself. This sounds promising; I will look into that over the weekend.

If you want some references to maybe figure out those weird behaviors in the meantime, Kotekan has a similar setup.

rafaelrcamargo avatar Apr 19 '24 13:04 rafaelrcamargo

It would also help if someone can implement the option to add conditions for resolve in bun: https://github.com/oven-sh/bun/issues/1527

aheissenberger avatar Apr 19 '24 15:04 aheissenberger

I did look at Kotekan but this implementation is using the multiple process architecture.

My current implementation needs only one process and supports hot reloading in the dev mode bun run start-dev see file ssr-bun-dev.ts. The hot reload library sometime fails to open a socket and currently only supports one build config. I will rewrite this lib to support multiple configs.

aheissenberger avatar Apr 19 '24 23:04 aheissenberger

I did look at Kotekan but this implementation is using the multiple process architecture.

Yeah, I only mentioned in case you wanted to have a different reference to the rendering process.

rafaelrcamargo avatar Apr 19 '24 23:04 rafaelrcamargo