Diarkisのサーバークラスターは水平分散による自動スケーリングが可能という特徴があります。
この特徴はクライアント側から見ると「接続先が増えたり減ったりする」ということになります。
接続先が増える場合、DiarkisのクライアントSDKからREST APIで返されるエンドポイントに接続すればよいだけなので、クライアントは意識する必要はありません。
しかしながら、スケールインが発生する場合は接続しているクライアントは再接続する必要があります。
Diarkisのサーバークラスターがスケールインする場合、スケールインするサーバーに接続されているクライアントに対して OnOffline イベントを発生させます。
クライアントはそのイベントを受け取った場合、再接続する必要があります。
本エントリでは、Diarkisへのサーバークラスターへ安全に再接続するための方法を説明します。
UDPクライアントの例
// This event is raised when the connected server is getting ready to remove itself from the server cluster
udp.OnOffline += HandleDiarkisOnOffline;
// This event is raised when the client connects to the server
udp.OnConnect += HandleDiarkisOnConnect;
private void HandleDiarkisOnOffline()
{
if (isInGame)
{
// If we are in game, we queue the action instead
queueOutGameActions.Add(() =>
{
//re-connect
udp.Migrate();
});
return;
}
// re-connect and raise OnConnect
udp.Migrate();
}
private void HandleDiarkisOnConnect(bool reconnected)
{
// Connected to the server
}
TCPクライアントの例
// This event is raised when the connected server is getting ready to remove itself from the server cluster
tcp.OnOffline += HandleDiarkisOnOffline;
// This event is raised when the client connects to the server
tcp.OnConnect += HandleDiarkisOnConnect;
private void HandleDiarkisOnOffline()
{
if (isInGame)
{
// If we are in game, we queue the action instead
queueOutGameActions.Add(() =>
{
//re-connect
tcp.Migrate();
});
return;
}
// re-connect and raise OnConnect
udp.Migrate();
}
private void HandleDiarkisOnConnect(bool reconnected)
{
// Connected to the server
}
※この処理は C# Client SDK v0.1.12 で確認されたものです。
おわりに
Diarkisのサーバークラスターは水平分散による自動スケーリングが可能で、高い耐障害性と拡張性を備えていることが大きな特徴です。
クライアント側ではその特性に合わせて、安全に再接続するための機構が提供されていますので、アプリケーションを実装する側は分散対応のための考慮を最小限にしつつ、作りたいものに集中することができます。