直接连接到服务结构

时间:2017-05-10 08:33:03

标签: .net azure azure-service-fabric

我目前在Azure云服务上运行游戏服务器后端服务,并希望将其移植到Service Fabric上运行。我遇到了一个我似乎无法解决的问题。

在后端的旧Cloud Service版本中,我们可以使用以下内容直接从我们的游戏客户端连接到特定的辅助角色:

  1. 使用本地端口和公共端口范围配置InstanceInputEndPoint
  2. <InstanceInputEndpoint name="GameServer" protocol="udp" localPort="10000"> <AllocatePublicPortFrom> <FixedPortRange min="10000" max="10999" /> </AllocatePublicPortFrom> </InstanceInputEndpoint>

    1. 获取私有ip:端口以将套接字绑定到via:
    2. RoleEnvironment.CurrentRoleInstance.InstanceEndpoints["GameServer"].IPEndpoint;

      1. 使用一些额外的配置值来提供云服务的保留IP公共IP地址,我们还可以计算客户端在分配给游戏服务器实例后应连接的公共IP:端口。
      2. var publicAddress = IPAddress.Parse(RoleEnvironment.GetConfigurationSettingValue("PublicAddress")); var publicPort = RoleEnvironment.CurrentRoleInstance.InstanceEndpoints["GameServer"].PublicIPEndpoint.Port; return new IPEndPoint(publicAddress, publicPort);

        我目前的问题很简单,我认为服务架构无法复制此设置,基本上是让我告诉客户端&#34;直接连接到我的游戏服务器服务的特定实例&#34;。

1 个答案:

答案 0 :(得分:2)

由于您尝试将现有应用程序迁移到服务结构,因此可以按照下述步骤进行操作。但是,如果要创建新应用程序,则应考虑使用reverse proxy

  1. 配置ServiceManifest.xml和clustermanifest。 在ServiceManifest.xml文件中,您必须在resouces标记中创建端点。请注意,此处不支持udp作为标准协议,但仅支持http,https和tcp。通过不提供端口号,Service Fabric将自动从可用的应用程序端口分配可用端口。

    <Endpoints>
        <Endpoint Name="GameServer" Protocol="http" />
    </Endpoints>
    

    应用程序端口在nodetypes下的群集清单中配置:

    "applicationPorts": {
        "startPort": "10000",
        "endPort": "10999"
    }
    
  2. 创建收听地址。为了获取侦听器的端口号,您可以使用服务上下文:

    int port = Context.CodePackageActivationContext.GetEndpoint("GameServer").Port;
    

    您可以使用以下格式创建收听地址:

    string listeningAddress = $"http://+:{port}/{applicationName}/";
    

    这假设您正在使用无状态服务。如果您使用的是有状态服务,则应添加:

    StatefulServiceContext ssc = (StatefulServiceContext) Context;
    listeningAddress += ssc.PartitionId + "/" + ssc.ReplicaId + "/";
    
  3. 您的发布地址应包含您的套接字协议和IP地址:

    string publishAddress = listeningAddress.Replace("+", FabricRuntime.GetNodeContext().IPAddressOrFQDN);
    publishAddress = publishAddress.Replace("http", "ws");
    
  4. 您可以在microsoft website上找到有关听众的更多信息。