如何连接Orleans服务器?
假设我有一个移动应用程序,我想要连接到Orleans服务器。
我应该直接连接到Orleans还是使用一些前端服务器(为什么)?
如果直接连接,我应该使用Orleans Streams还是自定义Socket连接。如果不能使用Orleans客户端(和流),那么如何实现接受Socket连接的Grain?当Grain不被使用时,会从内存中清除吗?
如果通过前端连接,那么该前端是否需要成为一个Grain本身?
我认为在某些情况下,流比观察者更受青睐,但我不认为这还是现在的情况。总体而言,观察者稍微更容易使用,但观察者方面的错误不会向集群传播,因此它本质上是一种“发出并忘记”的机制,而流则能够传播错误。
当前端与 Orleans 集群分开托管时,您可以获得一些安全性,因为 Orleans silo 主机不直接暴露于互联网。然而,每个请求或推送消息都需要额外的网络跳跃。为了避免这种情况,您可以将一个 silo 与一个 socket 服务组合成一个单独的进程,而不是拥有单独的前端和 silo 主机,现在您只有一个集群,它同时操作 socket 服务和 Orleans。
然而,您必须克服一个问题。即使呼叫来自与谷粒相同的进程,您也不能调用谷粒,除非使用谷粒客户端。幸运的是,现在存在一个托管的客户端,允许您在同一进程中但在Silo之外进行谷粒调用,而无需使用通过网络发送数据的完整谷粒客户端。这是一个相当新的功能,我还没有看到任何关于如何使用它的文档。RunAsync()
方法(或其他方法)以启动套接字服务器。GrainFactory
属性。如果您的套接字服务器要求您启动将使用GrainFactory
的独立任务,则必须注意grains and tasks的规则。
https://github.com/dotnet/orleans/releases
更新: 我认为这是实现此功能的拉取请求: https://github.com/dotnet/orleans/pull/3362