mathmark / stupid-simple-matchmaking
PHP Matchmaking system, useful for Live Service games!
Installs: 7
Dependents: 0
Suggesters: 0
Security: 0
Stars: 6
Watchers: 1
Forks: 0
Open Issues: 0
pkg:composer/mathmark/stupid-simple-matchmaking
This package is auto-updated.
Last update: 2025-10-12 14:26:01 UTC
README
PHP Library used for simple equal distance matchmaking, great for Live Service Games!
Installation
Simply run
composer require mathmark/stupid-simple-matchmaking in any PHP project setup with composer!
StupidSimple\Game\Matchmaking
This is where all the magic happens! All our matchmaking functionality is called here.
Constructor
-
private int $clientIpAddressThis is our base Client Address, this is what helps us find a server for a user -
private ?array $availableGameServers;This is an array populated with the metadata for our available GameServers
The structure should look like this
[
{
"name": "US-PROD-1",
"ipAddress": "192.168.1.10"
},
{
"name": "CHI-PROD-1",
"ipAddress": "192.168.1.20"
},
]
Functions
getRandomServer() : arrayThis returns an ipAddress & name for a random GameServer availablegetClosestServer() : arrayThis is where we utilise our$clientIpAddress, this will return an ipAddress & name for a GameServer thats closest to our User/Client
Note: If a name isn't provided for the server, one will be generated. However this is not recommended as it isn't great for organisation and is not consistent.
How this works & what is tracked?
Our service uses a trusted web API (ip-api) to get metadata for our client and server (such as Geolocation & CountryCode), it then uses this information to MatchMake our user.
Example Code
use StupidSimple\Game\Matchmaking; $availableGameServers = [ [ "name" => "US-PROD-1", "ipAddress" => "192.168.1.10" ], [ "name" => "CHI-PROD-1", "ipAddress" => "192.168.1.20" ] ]; $clientIp = $_SERVER['REMOTE_ADDR']; $matchmaking = new Matchmaking($clientIp, $servers); $closestServer = $matchmaking->getClosestServer(); exit(json_encode($closestServer));
Example Response
getClosestServer() && getRandomServer() both respectively return this array
{
"serverName" : "US-PROD-1",
"serverAddress" : "192.168.1.10"
}
getClosestServer() also returns the distance in the array, getRandomServer() does not.
For example:
{
"serverName" : "US-PROD-1",
"serverAddress" : "192.168.1.10",
"distance" : "0.00" # measured in miles
}
See StupidSimple\Math\DistanceCalulator for more information on how the algorithm works!