Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/react-native/7.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
Asp.net core gRPC基于回合的游戏服务器设计指南_Asp.net Core_Asp.net Web Api_Grpc_.net 5 - Fatal编程技术网

Asp.net core gRPC基于回合的游戏服务器设计指南

Asp.net core gRPC基于回合的游戏服务器设计指南,asp.net-core,asp.net-web-api,grpc,.net-5,Asp.net Core,Asp.net Web Api,Grpc,.net 5,有人有gRPC方面的经验吗?我现在正在运行一个风险游戏,所有玩家都是机器人,使用不同的算法确定他们如何/在哪里部署军队,以及如何/在哪里攻击。我现在有一个REST实现,其中客户端和服务器都必须运行HTTP服务器;因此,客户端向服务器发送帖子以加入游戏,并包含一个回调地址,以便服务器可以在轮到他们时向客户端发送帖子。现在一切都正常了,但是开发一个新的客户端有点复杂(因为它们需要托管自己的http服务器),加上防火墙使得所有玩家都必须在同一个网络上 我想知道如果gRPC不适合更简单的设计,我是否应该

有人有gRPC方面的经验吗?我现在正在运行一个风险游戏,所有玩家都是机器人,使用不同的算法确定他们如何/在哪里部署军队,以及如何/在哪里攻击。我现在有一个REST实现,其中客户端和服务器都必须运行HTTP服务器;因此,客户端向服务器发送帖子以加入游戏,并包含一个回调地址,以便服务器可以在轮到他们时向客户端发送帖子。现在一切都正常了,但是开发一个新的客户端有点复杂(因为它们需要托管自己的http服务器),加上防火墙使得所有玩家都必须在同一个网络上

我想知道如果gRPC不适合更简单的设计,我是否应该使用gRPC重新编写客户机/服务器交互逻辑。使用双向流,客户端可以呼叫服务器请求加入游戏,然后客户端将在其他玩家加入游戏时等待收听该流,服务器可以在轮到他们时通过该双向流向客户端发送消息。这样行吗

因为几乎整个游戏都将通过一个双向流,我想我需要让我的消息类型足够灵活,以适应不同的游戏状态。例如,请求可以包含

  • 操作{加入/部署/攻击}
  • ClientName:string
  • 部署位置:字符串,放置军队的坐标
  • 攻击来源:字符串,坐标
  • 攻击:字符串,坐标
然后,响应可以包含

  • 游戏状态{加入/部署/攻击/游戏结束}
  • 动作{Wait/Deploy/Attack/GameOver}
  • 董事会{领土名单,谁占领,有多少军队}
通过这种方式,客户机将首先发送一个只填写Action和ClientName的请求。然后服务器将以{“GameState”:“Joining”,“Action”:“Wait”}响应。所有玩家加入游戏后,服务器将发送第一个玩家{“GameState”:“Deploying”、“Action”:“Deploy”、“Board”:},客户端将向其发送{“DeployLocation”:(1,5)}。然后服务器询问下一个玩家他们想在哪里部署军队,等等


这种互动模式有效吗?在基于回合的游戏中,使用gRPC对客户机/服务器通信建模是错误的吗?我应该怎么做呢?

我决定编辑我的答案。您正在寻找有关重新编写游戏服务器/客户端的指南,以避免重新启动。我强烈建议您使用Signal R Core 信号R专门为基于消息的系统设计。您可以从客户端发送消息,即“player 1 played card X”,然后服务器将向连接的其他客户端广播该消息。您还可以设置“组”,这些组可用于“大厅”或“房间”