gpt4 book ai didi

.net - 直接连接到服务结构中的特定实例

转载 作者:行者123 更新时间:2023-12-02 07:49:07 26 4
gpt4 key购买 nike

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

在后端的旧云服务版本中,我们能够使用以下命令从游戏客户端直接连接到特定的工作角色:

  1. 使用本地端口和公共(public)端口范围配置 InstanceInputEndPoint

<InstanceInputEndpoint name="GameServer" protocol="udp" localPort="10000">
<AllocatePublicPortFrom>
<FixedPortRange min="10000" max="10999" />
</AllocatePublicPortFrom>
</InstanceInputEndpoint>

  • 获取私有(private) ip:port 以将套接字绑定(bind)到:
  • RoleEnvironment.CurrentRoleInstance.InstanceEndpoints["GameServer"].IPEndpoint;

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

    我当前的问题很简单,我认为服务结构中没有办法复制此设置,基本上是让我告诉客户端“直接连接到我的游戏服务器服务的这个特定实例”。

    最佳答案

    由于您正在尝试将现有应用程序迁移到 Service Fabric,因此您可以按照下面描述的步骤操作。但是,如果您要创建新应用程序,则应考虑使用 reverse proxy .

    1. 配置 ServiceManifest.xml 和 clustermanifest。在 ServiceManifest.xml 文件中,您必须在 resources 标记内创建一个端点。请注意,此处不支持 udp 作为标准协议(protocol),仅支持 http、https 和 tcp。如果不提供端口号,Service Fabric 将自动从可用应用程序端口中分配可用端口。

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

      应用程序端口在节点类型下的集群 list 中配置:

      "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. 您的发布地址应包含您的套接字协议(protocol)和 IP 地址:

      string publishAddress = listeningAddress.Replace("+", FabricRuntime.GetNodeContext().IPAddressOrFQDN);
      publishAddress = publishAddress.Replace("http", "ws");

    您可以在microsoft website上找到有关听众的更多信息。 .

    关于.net - 直接连接到服务结构中的特定实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43887329/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com