Unciv
Unciv copied to clipboard
Feature request: Multiplayer Server Listing, Pinging, and implementing "Choose Best Server" for Server Groups
Idea 1: Multiplayer Server Listing: Listing popular Multiplayer server
Idea 2: Implementing some ping mechanism: Describes itself.
Idea 3: Implementing Server Group ping mechanism. Described below. And the feature that I would want most now.
Preface So, for a long time I am facing a problem in deciding the server location for UncivServer.xyz At one time I used to have 3 servers synchronized with each other but people only used the default uncivserver.xyz because of it being the default endpoint. The problem resurfaced now, again, as Heroku decided to discontinue their free dynos, making it necessary to move UncivServer.xyz again to another service as well as choosing the best server location for UncivServer.xyz. UncivServer.xyz is most popular in China, Russia & USA (Alphabetically), and choosing a server location results in a much increase in pings from other locations.
For reference here is a map of the geographic distribution of the users of UncivServer.xyz within the last 30 days screenshotted from Cloudflare Dashboard.
Also another rank list of requests by country also powered by Cloudflare.
As you can see the distribution is rather spread all over. To begin with, there are continents Europe, Asia, and America covered. China and Japan are Asian, Chile and USA are in America and Russia extends from Asia to Europe.
So, choosing a server with moderate average pings to all of the locations is very problematic.
If you look at other Online Multiplayer Games, almost all of the popular ones have some mechanism to ping their server locations and choose the best one from the result.
Solutions
So, here is a solution that I was thinking of. Servers managed by one entity will be referred to as server groups. Within each server group, there can be multiple server locations described in: GET /serverConfig.json
.
The JSON file can be something like this:
{
"ServerName or name": "UncivServer.xyz"
"endpoints": [
{
"name": "Default",
"url": "https://uncivserver.xyz"
},
{
"name": "America",
"url": "https://us1.uncivserver.xyz"
},
{
"name": "Asia",
"url": "https://sg1.uncivserver.xyz"
},
{
"name": "Europe",
"url": "https://eu.uncivserver.xyz"
}
]
}
The client will then ping each of the ${url}/isalive
and choose the best server based on the result and show some message like, "You are connected to the Europe server of UncivServer.xyz"
Important Notes: Never ping hostnames but ${url}/isalive
. Cause in case of proxy like Cloudflare hostnames might point to the nearest Cloudflare server. So, the time to load ${url}/isalive
is the real ping.
So, what do you guys think about it?
This is a really cool idea, like http dns-ing And we can check if this endpoint exists, to default to regular behavior if it does not I would advise that we set this url "when the game loads" so if more servers are added existing users can benifit
I like this too
Idea 1: Multiplayer Server Listing: Listing popular Multiplayer server
I also thought about this some time ago but I don't really know how this could be implemented other than manually inserting servers into the code (which I guess isn't that bad since you mentioned 'popular' servers, which won't change that much)
This might also make it possible to move away from the non-free Dropbox "mp method" (? :) ). So people won't run into the pesky limits
Annnd ,In Chinese Mainland, about half of the regions can't access "uncivserver.xyz", so we recently opened a servers in Chinese Mainland (which has been officially approved by the Chinese government). I think we will share certain access pressure for "uncivserver.xyz" in the future
This issue is stale because it has been open 90 days with no activity. Remove stale label or comment or this will be closed in 15 days.