> 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/zh/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="/zh/unity.md">Unity</a> / <a data-mention href="/zh/unreal-engine.md">Unreal Engine</a> / <a data-mention href="/zh/godot.md">Godot</a>.</li></ul></td></tr><tr><td>服务器 SDK</td><td><strong>无需 SDK！</strong> 管理 <a href="/zh/learn/bian-pai/application-and-versions.md">应用版本</a> 无需重新构建。</td></tr><tr><td>Flexmatch 自托管</td><td><p><a href="/zh/learn/pi-pei-xi-tong.md">托管式匹配器</a>, <a href="/zh/learn/pi-pei-xi-tong/matchmaker-in-depth.md#hosting-cluster">免费试用</a>.</p><p>另请参阅适用于以下内容的可选轻量级 SDK： <a href="/zh/unreal-engine/developer-tools.md#integration-kit">Unreal</a> 和 <a href="/zh/unity/matchmaking.md">Unity</a>.</p></td></tr><tr><td>SearchGameSessions API</td><td><p><a href="/zh/learn/fu-wu-qi-liu-lan-qi.md">托管服务器浏览器 - 免费试用。</a></p><p>另请参阅适用于以下内容的可选轻量级 SDK： <a href="/zh/unreal-engine/developer-tools.md#integration-kit">Unreal</a> 和 <a href="/zh/unity/server-browser.md">Unity</a>.</p></td></tr><tr><td>游戏客户端身份验证</td><td><p>添加适合您会话模型的细粒度访问控制：</p><ul><li><a href="/zh/learn/pi-pei-xi-tong/matchmaker-in-depth.md#authenticate">匹配</a> / <a href="/zh/learn/fu-wu-qi-liu-lan-qi.md#authenticate">服务器浏览器</a> / <a href="https://app.edgegap.com/user-settings?tab=tokens">自定义 DIY 会话</a>.</li></ul></td></tr><tr><td>舰队 - 水平扩展</td><td><a data-mention href="/zh/learn/bian-pai/si-you-jian-dui.md">私有舰队</a> 使用 <a data-mention href="/zh/learn/bian-pai/chi-jiu-hua.md">持久化</a> 和 <a href="https://docs.edgegap.com/learn/orchestration/private-fleets#overflow-to-cloud">云溢出</a>.</td></tr><tr><td>A/B 测试、别名、队列</td><td><a href="/zh/learn/pi-pei-xi-tong/matchmaker-in-depth.md#matchmaking-profiles">配置文件（队列）</a> / <a href="/zh/learn/bian-pai/si-you-jian-dui.md#overflow-to-cloud">实例元数据</a> / <a href="/zh/learn/pi-pei-xi-tong/matchmaker-in-depth.md#rolling-updates-and-ab-tests">滚动更新</a>.</td></tr><tr><td>服务器分析</td><td><a href="/zh/learn/bian-pai/deployments.md#analytics">部署分析</a> 和 <a href="/zh/learn/pi-pei-xi-tong/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
{
    //这是一个将 GameLift server SDK 简单集成的示例，它会使游戏服务器进程在 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) => {
                    //当游戏会话更新时（例如通过 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 success.");
            }
            else
            {
                print("ProcessReady failure : " + processReadyOutcome.Error.ToString());
            }
        }
        else
        {
            print("InitSDK failure : " + 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](/zh/unreal-engine.md),
* [Unity](/zh/unity.md),
* [Godot](/zh/godot.md),
* 自定义运行时（即将推出）。
