PHP Library used for simple equal distance matchmaking, great for Live Service Games!
Simply run
composer require mathmark/stupid-simple-matchmaking
in any PHP project setup with composer!
This is where all the magic happens! All our matchmaking functionality is called here.
-
private int $clientIpAddress
This 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
[
{
"name": "US-PROD-1",
"ipAddress": "192.168.1.10"
},
{
"name": "CHI-PROD-1",
"ipAddress": "192.168.1.20"
},
]
getRandomServer() : array
This returns an ipAddress & name for a random GameServer availablegetClosestServer() : array
This 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.
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.
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));
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!