Jump to content
Search In
  • More options...
Find results that contain...
Find results in...

Welcome to our site

Take a moment to join our board

Sign in to follow this  
Spirited

Chimera: Conquer Online Private Server Project

Recommended Posts

Pretext

Hi everyone. I decided a few months back, after the chaos of moving jobs and finishing schooling, that I'd get back into my hobby projects. You've probably seen some of that on discord, like my TV case project (which I'll post here soon, too) or my Conquer Online portal editor in Go, but the biggest project I have is still largely up in the air. Chimera is my Conquer Online private server idea, and it's gone through a few iterations of designs. Before I ask for feedback, here's a quick introduction to the project (ripped from its readme file).

Introduction

Project Chimera is a four-role open distributed server architecture, named after the mythical four-headed beast. The game service is composed of an authentication server, gateway server, realm server, and fog of region servers. As players connect using the Conquer Online game client, their login will first be validated against the authentication server. Then, their client will be redirected to the world's gateway server, which decrypts and routes packets to and from the realm server and active region server. The region server services the player using a vertical slice of the game world, and the realm server instructs the region server on which slice it hosts.

The separation of roles into individual, independent servers allows Chimera to experiment with rolling upgrades and server maintenance without interrupting players. Its distributed architecture allows for the game service to accept a large amount of players concurrently, while also delivering feature rich maps and monster AI.

Diagram

Here's a quick diagram I came up with for my own use in Visio.

architecture.png

Discussion

So, I found out recently that the way I was doing error handling in Go was wrong. I adjusted that and returned back to my original source in Go. I laid out all the project structure, figured out how packages will relate to one another, the interfaces I'll use for mapping everything together across all projects, etc. I felt like Go was a good starting choice. It introduces a lot of risk, but this isn't exactly a business project... so I thought I'd give it a try. In my experience, Go has a much better time handling request volume than C# does (comparing the async-await model in C# to goroutines in Go). Go also has a lot of language support for security, including a really solid big number implementation, and great networking support. C# is my fall back, but I'm going to try with Go first.

My main concern is the architecture. I've been trying to poke holes in it, and so far felt pretty confident in it. I'm not taking the project too seriously, but I do plan on running these servers on Raspberry Pis and Pi Zeroes to better exacerbate performance issues during development (and just for fun to toy with different docker deployment models). But in general, what are people's thoughts here? At the end of the day, if something does go wrong, I can at least share that experience here - but I'd hope it'd go well. Thanks for reading.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×

Important Information

By using this site, you agree to our Terms of Use.