> For the complete documentation index, see [llms.txt](https://docs.edgegap.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.edgegap.com/ru/docs/tools-and-integrations/gamelift-to-arbitrium.md).

# Переход с Gamelift

Перенесите свои игровые серверы с AWS GameLift на Edgegap, выполнив короткий набор шагов, чтобы быстро запуститься.

Ищете более простую альтернативу текущему хостингу выделенных серверов Amazon GameLift?

## Сравнить функции

Определите сервисы и функции GameLift и откройте для своего проекта эквиваленты от Edgegap:

<table><thead><tr><th width="250">Функция AWS GameLift</th><th>Функции Edgegap</th></tr></thead><tbody><tr><td>Плагин сборки сервера</td><td><p>Нативные для движка, полностью автоматизированные плагины быстрого старта:</p><ul><li><a data-mention href="/ru/unity.md">Unity</a> / <a data-mention href="/ru/unreal-engine.md">Unreal Engine</a> / <a data-mention href="/ru/godot.md">Godot</a>.</li></ul></td></tr><tr><td>SDK сервера</td><td><strong>SDK не требуется!</strong> Управление <a href="/ru/learn/orkestraciya/application-and-versions.md">Версии приложения</a> без пересборки.</td></tr><tr><td>Самостоятельно размещаемый FlexMatch</td><td><p><a href="/ru/learn/matchmeiking.md">Управляемый матчмейкер</a>, <a href="/ru/learn/matchmeiking/matchmaker-in-depth.md#hosting-cluster">тестируйте бесплатно</a>.</p><p>См. также необязательный облегчённый SDK для <a href="/ru/unreal-engine/developer-tools.md#integration-kit">Unreal</a> и <a href="/ru/unity/matchmaking.md">Unity</a>.</p></td></tr><tr><td>API SearchGameSessions</td><td><p><a href="/ru/learn/brauzer-serverov.md">Управляемый браузер серверов — протестируйте бесплатно.</a></p><p>См. также необязательный облегчённый SDK для <a href="/ru/unreal-engine/developer-tools.md#integration-kit">Unreal</a> и <a href="/ru/unity/server-browser.md">Unity</a>.</p></td></tr><tr><td>Аутентификация игрового клиента</td><td><p>Добавьте детализированные элементы управления доступом, соответствующие вашей модели сессий:</p><ul><li><a href="/ru/learn/matchmeiking/matchmaker-in-depth.md#authenticate">Подбор игроков</a> / <a href="/ru/learn/brauzer-serverov.md#authenticate">Браузер серверов</a> / <a href="https://app.edgegap.com/user-settings?tab=tokens">Пользовательские сессии своими силами</a>.</li></ul></td></tr><tr><td>Пулы серверов — горизонтальное масштабирование</td><td><a data-mention href="/ru/learn/orkestraciya/chastnye-floty.md">Частные флоты</a> с <a data-mention href="/ru/learn/orkestraciya/postoyanstvo.md">Постоянство</a> и <a href="https://docs.edgegap.com/learn/orchestration/private-fleets#overflow-to-cloud">Cloud Overflow</a>.</td></tr><tr><td>A/B-тестирование, псевдонимы, очереди</td><td><a href="/ru/learn/matchmeiking/matchmaker-in-depth.md#matchmaking-profiles">Профили (очереди)</a> / <a href="/ru/learn/orkestraciya/chastnye-floty.md#overflow-to-cloud">Метаданные экземпляра</a> / <a href="/ru/learn/matchmeiking/matchmaker-in-depth.md#rolling-updates-and-ab-tests">Пошаговые обновления</a>.</td></tr><tr><td>Аналитика серверов</td><td><a href="/ru/learn/orkestraciya/deployments.md#analytics">Аналитика развертываний</a> и <a href="/ru/learn/matchmeiking/matchmaker-in-depth.md#analytics">Аналитика подбора игроков</a>.</td></tr></tbody></table>

## Удалите AWS GameLift SDK

Первый шаг к переходу на Edgegap — удалить код, который инициализирует AWS GameLift внутри вашего игрового сервера. Это нужно, чтобы снизить накладные расходы и предотвратить ошибки. Код, который вам нужно удалить, вероятно, выглядит так:

{% tabs %}
{% tab title="Unity (C#)" %}
{% code expandable="true" %}

```cs
using UnityEngine;
using Aws.GameLift.Server;
using System.Collections.Generic;

public class GameLiftServerExampleBehavior : MonoBehaviour
{
    //Это пример простой интеграции с серверным SDK GameLift, которая позволит процессам игрового сервера переходить в активное состояние в GameLift!
    public void Start()
    {
        //Укажите номер порта (здесь он задан жёстко для простоты), на котором игровой сервер слушает подключения игроков
        var listeningPort = 7777;

        //InitSDK установит локальное соединение с агентом GameLift для последующей связи.
        var initSDKOutcome = GameLiftServerAPI.InitSDK();
        if (initSDKOutcome.Success)
        {
            ProcessParameters processParameters = new ProcessParameters(
                (gameSession) => {
                    //Когда игровая сессия создаётся, GameLift отправляет запрос на активацию игровому серверу и передаёт объект игровой сессии, содержащий игровые свойства и другие настройки.
                    //Здесь игровой сервер должен выполнить действия на основе объекта игровой сессии.
                    //Как только игровой сервер будет готов принимать входящие подключения игроков, он должен вызвать GameLiftServerAPI.ActivateGameSession()
                    GameLiftServerAPI.ActivateGameSession();
                },
                (updateGameSession) => {
                    //Когда игровая сессия обновляется (например, при backfill в FlexMatch), GameLift отправляет запрос на игровой
                    //сервер, содержащий обновлённый объект игровой сессии. Затем игровой сервер может изучить предоставленные
                    //matchmakerData и соответствующим образом обработать новых входящих игроков.
                    //updateReason — это причина, по которой предоставляется это обновление.
                },
                () => {
                    //Колбэк OnProcessTerminate. GameLift вызовет этот колбэк перед завершением работы экземпляра, на котором размещён этот игровой сервер.
                    //Это даёт игровому серверу возможность сохранить своё состояние, обменяться данными с сервисами и т. д. перед завершением работы.
                    //В данном случае мы просто сообщаем GameLift, что действительно собираемся завершиться.
                    GameLiftServerAPI.ProcessEnding();
                },
                () => {
                    //Это колбэк HealthCheck.
                    //GameLift будет вызывать этот колбэк примерно каждые 60 секунд.
                    //Здесь игровой сервер может проверить состояние зависимостей и т. п.
                    //Просто верните true, если всё в порядке, и false в противном случае.
                    //У игрового сервера есть 60 секунд, чтобы ответить своим статусом здоровья. GameLift по умолчанию примет значение 'false', если игровой сервер не ответит вовремя.
                    //В данном случае мы всегда в порядке!
                    return true;
                },
                listeningPort, //Этот игровой сервер сообщает GameLift, что будет слушать порт 7777 для входящих подключений игроков.
                new LogParameters(new List<string>()
                {
                    //Здесь игровой сервер сообщает GameLift, какой набор файлов нужно загрузить после завершения игровой сессии.
                    //GameLift загрузит всё, что указано здесь, чтобы разработчики могли затем это получить.
                    "/local/game/logs/myserver.log"
                }));

            //Вызов ProcessReady сообщает GameLift, что этот игровой сервер готов принимать входящие игровые сессии!
            var processReadyOutcome = GameLiftServerAPI.ProcessReady(processParameters);
            if (processReadyOutcome.Success)
            {
                print("ProcessReady выполнен успешно.");
            }
            else
            {
                print("Сбой ProcessReady: " + processReadyOutcome.Error.ToString());
            }
        }
        else
        {
            print("Сбой InitSDK: " + initSDKOutcome.Error.ToString());
        }
    }

    void OnApplicationQuit()
    {
        //Обязательно вызывайте GameLiftServerAPI.Destroy() при выходе из приложения. Это сбрасывает локальное соединение с агентом GameLift.
        GameLiftServerAPI.Destroy();
    }
}
```

{% endcode %}
{% endtab %}

{% tab title="Unreal Engine (C++)" %}
{% code expandable="true" %}

```cpp
using UnrealBuildTool;

public class MyAwesomeGame : ModuleRules
{
	public MyAwesomeGame(TargetInfo Target)
	{
		PublicDependencyModuleNames.AddRange(
            // Удалите GameLiftServerSDK
            new string[] { "Core", "CoreUObject", "Engine", "InputCore", "GameLiftServerSDK" }
        );
        bEnableExceptions = true;
	}
}
```

{% endcode %}

{% code expandable="true" %}

```cpp
#include "GameLiftFPS.h"
#include "Engine.h"
#include "EngineGlobals.h"
#include "GameLiftFPSGameMode.h"
#include "GameLiftFPSHUD.h"
#include "GameLiftFPSCharacter.h"
#include "GameLiftServerSDK.h"

AGameLiftFPSGameMode::AGameLiftFPSGameMode()
	: Super()
{

//Запустим этот код только если включён GAMELIFT. Только для серверных целей!
#if WITH_GAMELIFT

	//Сначала получаем модуль.
	FGameLiftServerSDKModule* gameLiftSdkModule = &FModuleManager::LoadModuleChecked<FGameLiftServerSDKModule>(FName("GameLiftServerSDK"));

	//InitSDK установит локальное соединение с агентом GameLift для последующей связи.
	gameLiftSdkModule->InitSDK();

	//Когда игровая сессия создаётся, GameLift отправляет запрос на активацию игровому серверу и передаёт объект игровой сессии, содержащий игровые свойства и другие настройки.
	//Здесь игровой сервер должен выполнить действия на основе объекта игровой сессии.
	//Как только игровой сервер будет готов принимать входящие подключения игроков, он должен вызвать GameLiftServerAPI.ActivateGameSession()
	auto onGameSession = [=](Aws::GameLift::Server::Model::GameSession gameSession)
	{
		gameLiftSdkModule->ActivateGameSession();
	};

	FProcessParameters* params = new FProcessParameters();
	params->OnStartGameSession.BindLambda(onGameSession);

	//Колбэк OnProcessTerminate. GameLift вызовет этот колбэк перед завершением работы экземпляра, на котором размещён этот игровой сервер.
	//Это даёт игровому серверу возможность сохранить своё состояние, обменяться данными с сервисами и т. д. перед завершением работы.
	//В данном случае мы просто сообщаем GameLift, что действительно собираемся завершиться.
	params->OnTerminate.BindLambda([=](){gameLiftSdkModule->ProcessEnding();});

	//Это колбэк HealthCheck.
	//GameLift будет вызывать этот колбэк примерно каждые 60 секунд.
	//Здесь игровой сервер может проверить состояние зависимостей и т. п.
	//Просто верните true, если всё в порядке, и false в противном случае.
	//У игрового сервера есть 60 секунд, чтобы ответить своим статусом здоровья. GameLift по умолчанию примет значение 'false', если игровой сервер не ответит вовремя.
	//В данном случае мы всегда в порядке!
	params->OnHealthCheck.BindLambda([](){return true; });

	//Этот игровой сервер сообщает GameLift, что будет слушать порт 7777 для входящих подключений игроков.
	params->port = 7777;

	//Здесь игровой сервер сообщает GameLift, какой набор файлов нужно загрузить после завершения игровой сессии.
	//GameLift загрузит всё, что указано здесь, чтобы разработчики могли затем это получить.
	TArray<FString> logfiles;
	logfiles.Add(TEXT("aLogFile.txt"));
	params->logParameters = logfiles;

	//Вызов ProcessReady сообщает GameLift, что этот игровой сервер готов принимать входящие игровые сессии!
	gameLiftSdkModule->ProcessReady(*params);
#endif
}
```

{% endcode %}
{% endtab %}
{% endtabs %}

## Начать работу с Edgegap

Попробуйте одно из наших руководств быстрого старта, поддерживаемых плагинами для игровых движков:

* [Unreal Engine](/ru/unreal-engine.md),
* [Unity](/ru/unity.md),
* [Godot](/ru/godot.md),
* Пользовательская среда выполнения (скоро).
