Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 直接连接到服务结构中的特定实例_.net_Azure_Azure Service Fabric - Fatal编程技术网

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

.net 直接连接到服务结构中的特定实例,.net,azure,azure-service-fabric,.net,Azure,Azure Service Fabric,我有一个游戏服务器后端服务目前正在Azure云服务上运行,并希望将其移植到服务结构上运行。我遇到了一个似乎无法解决的问题 在旧的后端云服务版本中,我们可以通过以下方式从游戏客户端直接连接到特定的工作者角色: 使用本地端口和公共端口范围配置InstanceInputEndPoint 通过以下方式获取要将套接字绑定到的专用ip:端口: RoleEnvironment.CurrentRoleInstance.InstanceEndpoints[“GameServer”].IPEndpoint;

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

在旧的后端云服务版本中,我们可以通过以下方式从游戏客户端直接连接到特定的工作者角色:

  • 使用本地端口和公共端口范围配置InstanceInputEndPoint
  • 
    

  • 通过以下方式获取要将套接字绑定到的专用ip:端口:
  • RoleEnvironment.CurrentRoleInstance.InstanceEndpoints[“GameServer”].IPEndpoint;
    

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


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

    因为您试图将现有应用程序迁移到service fabric,所以可以按照下面描述的步骤进行操作。但是,如果你正在创建一个新的应用程序,你应该考虑使用.< /p>
  • 配置ServiceManifest.xml和clustermanifest。 在ServiceManifest.xml文件中,必须在Resources标记内创建端点。注意,这里不支持udp作为标准协议,只支持http、https和tcp。通过不提供端口号,服务结构将自动从可用应用程序端口分配可用端口

    <Endpoints>
        <Endpoint Name="GameServer" Protocol="http" />
    </Endpoints>
    
  • 创建侦听地址。要获取侦听器的端口号,可以使用服务上下文:

    int port = Context.CodePackageActivationContext.GetEndpoint("GameServer").Port;
    
    您可以使用以下格式创建侦听地址:

    string listeningAddress = $"http://+:{port}/{applicationName}/";
    
    这是假设您使用的是无状态服务。如果您使用的是有状态服务,则应添加:

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

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

  • 您可以在上找到有关侦听器的详细信息。

    因为您正在尝试将现有应用程序迁移到service fabric,所以可以按照下面描述的步骤进行操作。但是,如果你正在创建一个新的应用程序,你应该考虑使用.< /p>
  • 配置ServiceManifest.xml和clustermanifest。 在ServiceManifest.xml文件中,必须在Resources标记内创建端点。注意,这里不支持udp作为标准协议,只支持http、https和tcp。通过不提供端口号,服务结构将自动从可用应用程序端口分配可用端口

    <Endpoints>
        <Endpoint Name="GameServer" Protocol="http" />
    </Endpoints>
    
  • 创建侦听地址。要获取侦听器的端口号,可以使用服务上下文:

    int port = Context.CodePackageActivationContext.GetEndpoint("GameServer").Port;
    
    您可以使用以下格式创建侦听地址:

    string listeningAddress = $"http://+:{port}/{applicationName}/";
    
    这是假设您使用的是无状态服务。如果您使用的是有状态服务,则应添加:

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

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

  • 您可以在上找到有关侦听器的更多信息。

    我可以问一下您为什么需要/想要这种行为吗?我们谈论的是无状态或有状态服务吗?我可以问一下为什么需要/想要这种行为吗?我们说的是无状态的还是有状态的服务?那就是@Wouter B那正是我要找的…那就是@Wouter B那正是我要找的。。。