Merge branch 'main' of ssh://gitea.bchen.dev:2222/brendan/brendan-ch.github.io
All checks were successful
Deploy Jekyll site to Cloudflare Pages / build (push) Successful in 3m22s
All checks were successful
Deploy Jekyll site to Cloudflare Pages / build (push) Successful in 3m22s
This commit is contained in:
@@ -1,10 +1,4 @@
|
|||||||
# This workflow uses actions that are not certified by GitHub.
|
name: Deploy Jekyll site to Cloudflare Pages
|
||||||
# They are provided by a third-party and are governed by
|
|
||||||
# separate terms of service, privacy policy, and support
|
|
||||||
# documentation.
|
|
||||||
|
|
||||||
# Sample workflow for building and deploying a Jekyll site to GitHub Pages
|
|
||||||
name: Deploy Jekyll site to Pages
|
|
||||||
|
|
||||||
on:
|
on:
|
||||||
# Runs on pushes targeting the default branch
|
# Runs on pushes targeting the default branch
|
||||||
@@ -41,14 +35,13 @@ jobs:
|
|||||||
ruby-version: '3.4.1' # Not needed with a .ruby-version file
|
ruby-version: '3.4.1' # Not needed with a .ruby-version file
|
||||||
bundler-cache: true # runs 'bundle install' and caches installed gems automatically
|
bundler-cache: true # runs 'bundle install' and caches installed gems automatically
|
||||||
cache-version: 0 # Increment this number if you need to re-download cached gems
|
cache-version: 0 # Increment this number if you need to re-download cached gems
|
||||||
- name: Setup Pages
|
|
||||||
id: pages
|
|
||||||
uses: actions/configure-pages@v5
|
|
||||||
- name: Build with Jekyll
|
- name: Build with Jekyll
|
||||||
# Outputs to the './_site' directory by default
|
# Outputs to the './_site' directory by default
|
||||||
run: bundle exec jekyll build --baseurl "${{ steps.pages.outputs.base_path }}"
|
run: bundle exec jekyll build --baseurl "${{ steps.pages.outputs.base_path }}"
|
||||||
env:
|
env:
|
||||||
JEKYLL_ENV: production
|
JEKYLL_ENV: production
|
||||||
|
|
||||||
- name: Push image optimizations onto main
|
- name: Push image optimizations onto main
|
||||||
continue-on-error: true
|
continue-on-error: true
|
||||||
run: |
|
run: |
|
||||||
@@ -58,18 +51,11 @@ jobs:
|
|||||||
git add assets/img
|
git add assets/img
|
||||||
git commit -m "chore: optimize images"
|
git commit -m "chore: optimize images"
|
||||||
git push
|
git push
|
||||||
- name: Upload artifact
|
|
||||||
# Automatically uploads an artifact from the './_site' directory by default
|
|
||||||
uses: actions/upload-pages-artifact@v3
|
|
||||||
|
|
||||||
# Deployment job
|
- name: Publish to Cloudflare Pages
|
||||||
deploy:
|
uses: cloudflare/wrangler-action@v3
|
||||||
environment:
|
with:
|
||||||
name: github-pages
|
apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
|
||||||
url: ${{ steps.deployment.outputs.page_url }}
|
accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
|
||||||
runs-on: ubuntu-latest
|
command: pages deploy _site --project-name=${{ vars.CLOUDFLARE_PROJECT_NAME }}
|
||||||
needs: build
|
|
||||||
steps:
|
|
||||||
- name: Deploy to GitHub Pages
|
|
||||||
id: deployment
|
|
||||||
uses: actions/deploy-pages@v5
|
|
||||||
@@ -1,22 +0,0 @@
|
|||||||
---
|
|
||||||
title: Game server orchestration
|
|
||||||
---
|
|
||||||
|
|
||||||
To me, *game server orchestration* is solving the problem of provisioning dedicated game servers in a scalable manner for a multiplayer game.
|
|
||||||
|
|
||||||
When I added dedicated server builds through [[PurrNet]] for [[Resonance]], a cyberpunk-themed first person shooter, I did not realize the work I was giving myself later when it came to launching the game. Pre-rewrite, the [vibe-coded prototype](https://github.com/brendan-ch/ResonanceServerOrchestrator/tree/2d71f0491830dfa91d7887c208c14c52d6513202) I created comes nowhere close to being production ready.
|
|
||||||
|
|
||||||
Previously the game used [PurrLay](https://github.com/PurrNet/PurrLay), a peer-to-peer relay that clients connect to, where one of the clients becomes the *host* for a match. With the *dedicated server* architecture, all clients connect directly to the game server which can run game logic.[^1][^2] Adding the game server orchestrator means knowing when to start and stop a server, and how to point players to the server with the correct match.
|
|
||||||
|
|
||||||
I decided to try and turn the aforementioned prototype into a [custom backend](https://github.com/brendan-ch/ResonanceServerOrchestrator/tree/2d71f0491830dfa91d7887c208c14c52d6513202) for the orchestration. The basic flows look something like this:
|
|
||||||
|
|
||||||
- Players *join* a match in the orchestrator after having been in the same lobby, so the orchestrator doesn't depend on the lobby backend
|
|
||||||
- When all players have joined, the orchestrator provisions the dedicated server, and players *connect to the dedicated server* to play the game
|
|
||||||
- When the game ends, players *leave* the match in the orchestrator, and the server exits
|
|
||||||
|
|
||||||
[Edgegap](https://edgegap.com) is currently planned as the dedicated server platform. But, hopefully, with the custom orchestrator, we retain some ability to switch to other providers.
|
|
||||||
|
|
||||||
Right now this system works fine in development when conditions are predictable, but there is still much work to be done. I am *not* a backend engineer by trade.
|
|
||||||
|
|
||||||
[^1]: I didn't realize that I could drop [PurrLay](https://github.com/PurrNet/PurrLay) when adding the dedicated server until later.
|
|
||||||
[^2]: With Unity, a dedicated server build generates a Linux executable that can be put into a Docker container.
|
|
||||||
Reference in New Issue
Block a user