Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.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
C# 奥尔良入门:实现、托管和部署 我正在制作一个应用程序作为一种学习体验,我遇到了两个主要问题:_C#_.net_Amazon Web Services_Actor_Orleans - Fatal编程技术网

C# 奥尔良入门:实现、托管和部署 我正在制作一个应用程序作为一种学习体验,我遇到了两个主要问题:

C# 奥尔良入门:实现、托管和部署 我正在制作一个应用程序作为一种学习体验,我遇到了两个主要问题:,c#,.net,amazon-web-services,actor,orleans,C#,.net,Amazon Web Services,Actor,Orleans,1) 我有一个对奥尔良来说可能是好主意,也可能不是好主意的实现方案……我只是不知道 2) 我正在寻找关于托管和部署的建议,基本上是:在哪里以及如何?这只是一次学习体验,所以小而便宜/免费很重要 所以,首先。。。关于我正在制作的应用程序的一些信息: 这是一款基于移动gps的应用程序,带有MongoDB存储 现实世界被划分为不同和持久的区域,即gps位置块 当某个用户在给定区域中处于活动状态时,该区域中的所有其他用户都可以看到该用户,并且该用户开始接收有关该区域的属性和该区域中活动的其他用户的位置

1) 我有一个对奥尔良来说可能是好主意,也可能不是好主意的实现方案……我只是不知道

2) 我正在寻找关于托管和部署的建议,基本上是:在哪里以及如何?这只是一次学习体验,所以小而便宜/免费很重要

所以,首先。。。关于我正在制作的应用程序的一些信息:
  • 这是一款基于移动gps的应用程序,带有MongoDB存储
  • 现实世界被划分为不同和持久的区域,即gps位置块
  • 当某个用户在给定区域中处于活动状态时,该区域中的所有其他用户都可以看到该用户,并且该用户开始接收有关该区域的属性和该区域中活动的其他用户的位置的更新
  • 用户可以操纵区域的属性
  • 用户需要能够显式加入和离开区域,但也需要在超时后离开
我有两种谷物:USERGREAN和RegionGrain。 对于问题1)将该地区作为一种粮食来实施是否是一个好主意?一些不同的示例支持此实现。但是,最佳实践手册指出,这不是一个好主意,因为这是一项长期的工作(该地区将无限期地持续下去),而这种类型的谷物可能是一个瓶颈。但是我需要它像“存在”样本中的“游戏颗粒”,玩家加入和离开(显式或超时)

(第2期)

  • 我有一个作为控制台应用程序实现的思洛存储器。我使用amazon elastic beanstalk部署了一个.net web应用程序,但我不知道从哪里开始使用控制台应用程序。亚马逊真的是一个不错的选择吗?我只是从最近的使用中默认了它
  • 如果区域降雨是个坏主意。。。一个好主意会是什么样子
  • 如果区域雨是个好主意。。。有没有办法告诉奥尔良永远不要停用它?如果是这样的话,我应该使用定时器来满足超时要求,并使用状态和心跳来进行更新……对吗?如果不是,我是否应该在某个地方托管另一个维护和运行RegionRain的控制台应用程序

如果这仍然是一个实际问题:

关于第1期)-我觉得您的区域粒度很好-这不是一个持续工作的粒度,而是您的区域注册表:当用户进入区域时,他会在区域粒度中注册(或者由外部区域监视器注册,如果您想消除用户在这方面的责任)。这些区域可以无限期地持续存在,但这并不意味着它们是长时间运行的作业

长时间运行的作业在奥尔良术语中,是指用一种方法(或者更糟的是,睡眠几秒钟或几分钟)进行大量活动的作业-这将保留奥尔良线程池中的纹理和线程-因此这种做法被认为是不好的,但在这里并不适用

关于托管-只要你知道如何在那里托管和运行你的工作,亚马逊就和其他任何托管一样好。我们正在使用Azure为我们的托管-云服务很容易开始,VM成本通常与亚马逊(除了Azure免费试用短于Amazon 3.3个月vs 1年,但有更多的资源)。 关于问题2),计时器和其他-计时器不是持久性的,因此如果颗粒被停用-它们将丢失,必须重新启动。提醒是恢复谷物的更好选择,并且谷物上有一种方法可以防止停用-
DelayDeactivation()
,显式停用的相反方法是
DeactivateOnIdle()
。 关于更新-我们发现Orleans Streams是一个非常好的概念,可以广播大量更新(例如,从RegionRain到所有订阅\注册用户),因此请查看它,它可以解决订阅和广播的许多问题

总的来说,我会以一种不同的方式构建它——让您的系统是被动的,而不是主动的。e、 g:

  • 用户进入区域-所以他只是在区域颗粒上注册他的存在,并订阅区域事件
  • 对区域的任何更改都会被记录并推送到奥尔良流,这样所有订户都会收到区域事件
  • 对其他玩家的任何更改-发送给region grain(因此这将是我们的真相来源),然后重新广播给其他region订户
如果出现噪音区域很大的问题(当系统中发生太多变化且重新广播太大时,您可以使您的区域成为区域流的另一个订户,这样每个玩家都将通过奥尔良流向其他玩家和区域本身广播。或者将您的区域设置为广播控制器,该控制器将在一批中向流广播所有变化只有在一段时间后-每秒钟或每5秒钟

希望这有帮助