- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我刚刚了解了 CAF,C++ Actor Framework .
让我感到惊讶的一件事是,通过网络使 Actor 可用的方法是"publish"。它到一个特定的 TCP 端口。
这基本上意味着您可以发布的参与者数量受限于您拥有的端口数量 (64k)。由于您既需要一个端口来发布 Actor ,又需要一个端口来访问远程 Actor ,我假设两个进程每个最多能够共享大约 32k 个 Actor ,而它们可能每个都在商品服务器上拥有一百万个 Actor .如果集群有 10 个节点,情况会更糟。
为了使发布具有可扩展性,每个进程只需要为一个系统中的每个参与者打开1 端口,并打开与每个参与者系统的1 连接他们想要访问。
有没有办法将一个 Actor 发布为 Actor 系统中所有 Actor 的代理(最好没有任何显着的性能损失)?
最佳答案
让我补充一些背景。 middleman::publish
/middleman::remote_actor
函数对做两件事:连接两个 CAF 实例并为您提供与远程参与者通信的句柄。您“发布”到给定端口的 actor 旨在充当入口点。这是一个方便的集合点,仅此而已。
两个 actor 之间的通信只需要一个句柄。当然,如果你想和更多的 Actor 交谈,你需要以某种方式学习新的把戏。 remote_actor
函数只是一种在两个参与者之间实现会合的便捷方式。但是,在您了解句柄后,您可以在分布式系统中自由传递它。 Actor 句柄是网络透明的。
此外,CAF 将始终在两个参与者系统之间保持单个 TCP 连接。如果您在主机 A 上发布 10 个参与者并通过 remote_actor
“连接”到主机 B 的所有 10 个参与者,您将看到 CAF 最初将打开 10 个连接(因为目标节点可以运行多个参与者系统) 但除一个连接外的所有连接都将关闭。
如果您不关心 publish
/remote_actor
提供的 actor 的集合点,那么您也可以使用 middleman::open
和middleman::connect
代替。这将只连接两个 CAF 实例而不交换角色句柄。相反,connect
将在成功时返回一个 node_id
。这就是某些功能所需的全部。例如remote spawning of actors .
Is there a way to publish one actor as a proxy for all actors in an actor system ( preferably without any significant performance loss )?
您可以在端口发布一个 actor,其唯一目的是为会合点建模。如果该 actor 向远程 actor 发送 1000 个以上的 actor 句柄,这将不会导致任何额外的网络连接。
推荐的方法是编写一个自定义 actor,通过提供某种排序字典来显式建模多个系统之间的会合点。
只是为了完整起见:CAF 也有一个注册机制。但是,键限于 atom
值,即 10 个字符或更少。由于注册表是通用的,它也只存储 strong_actor_ptr
并将类型安全留给您。但是,如果这就是您所需要的:您将句柄放入注册表(请参阅 actor_system::registry
),然后通过 middleman::remote_lookup
远程访问此注册表(您只需要node_id
来执行此操作)。
关于c++ - 如何 "publish"CAF中的大量 Actor ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46329780/
根据下面的链接,我应该能够配置Web一键发布。甚至还有屏幕截图显示如何实现这一目标。但是,我在解决方案资源管理器中找不到该选项。我是弱智还是瞎子?! 如果有人质疑我的理智和在菜单上查找项目的能力,我很
我使用 OAuth 框架,它像这样异步创建经过身份验证的请求: OAuthSession.current.makeAuthenticatedRequest(request: myURLRequest)
我如何跨此 我为一个简单的秒表编写了代码,它也可以兼用作Rubik的立方计时器。源代码和可执行文件在这里: Cube timer 无论如何,我的疑问不是关于此代码的(它工作正常)。 我下载了我上传的可
我想使用 Apple 的新 Combine 框架从列表中的每个元素发出多个请求。然后我想要一个减少所有响应的单一结果。基本上,我想从发布者列表转到拥有响应列表的单个发布者。 我尝试制作一个发布商列表,
我在 EnvironmentObject 中为我的应用创建了一个“状态”对象像这样: class AppState: ObservableObject { @Published var cou
将企业应用程序部署到服务器(例如 Glassfish 或 JBoss)时,完全发布和增量发布有什么区别? 我看到部署的工件树中列出了几个模块,但是当我在 Web 存档上使用增量发布时,会发生一些事情,
我找不到这个记录。假设我想将一个端口发布到一个已知的地方,但有时会发布所有其他“暴露”的端口以进行调试或测试。 一个简单的 Dockerfile FROM alpine CMD /bin/sleep
在使用 ivy:publish ant 任务发布工件时,工件名称会附加我们为 ivy:publishrevision/pubrevision 属性指定的任何内容> 任务。 有没有办法将时间戳附加到这个
来自数据库系统概念,用于对象关系数据库的 SQL 命令: create type Publisher as (name varchar(20), branch varchar(20)); create
我有一个发布功能如下: Meteor.publish('tasks', function (name) { var project = Projects.findOne({name: name
我目前正在尝试实现两个出版商的合并。但是我找不到适合我的用例的解决方案。 我想合并 2 个发布者,它们都发出相同类型的结构数组。我希望合并的发布者在任一合并的发布者发出新值时发出值。 基本上这将是 P
我正在尝试复制 WWDC 2019 session “结合实践”中给出的“Wizard School Signup”示例 https://developer.apple.com/videos/play
我遇到 TweetInvi 0.9.9.7 无法上传视频的问题。该视频是一个 9MB 的 MP4 视频,我可以使用网络界面将它上传到 Twitter。我收到的错误消息是: The tweet cann
我在本地使用第三方库,我使用他们提供的步骤安装了所有内容。 我对包运行了 composer require 并运行了更新。这安装到 vendor 文件夹中。 然后我将路径添加到 config/app
尝试编译以下代码时: class LoginViewModel: ObservableObject, Identifiable { @Published var mailAdress: Str
我使用 .NET Core Framework 在 Visual Studio 2015 中创建了一个简单的 Web API 项目。当我使用默认设置发布此项目时,它会创建以下内容: 总共有 155 个
我正在 Laravel 7 中实现一个包并使用 https://github.com/jeroennoten/Laravel-AdminLTE作为引用。 在我的包内,我有以下结构 packages/m
当我尝试使用 Google 的结构化数据测试工具验证我的结构化数据时,出现错误: The attribute publisher.itemtype has an invalid value. 我在这条
刚从使用 Books 应用程序示例的 Djangobook 教程中学习时,您通过多对多关系将 Book 与 Author 相关,并将 Book 与 Publisher 相关。您可以使用 p.book_
我只是不得不这样做。绝对每个问题我都查找了有关此问题的问题,但他们的答案都没有帮助我解决问题。 我正在尝试在我的 Facebook 页面上发帖。 问题是: 错误:“(#100)您不能在已发布的帖子上指
我是一名优秀的程序员,十分优秀!