问题标签 [message-passing]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 插件框架中的消息传递
首先,我的博客上有一些关于这个问题的背景资料:
- http://www.codebork.com/coding/2008/06/25/message-passing-a-plug-framework.html
- http://www.codebork.com/coding/2008/07/31/message-passing-2.html
我知道描述不是很清楚,所以我会在这里尽可能地总结我正在尝试的内容。该应用程序是一个个人理财程序。本文末尾提供了有关框架本身的更多背景信息。
框架可以处理许多不同类型的插件(例如,帐户、导出、报告等)。但是,我专注于一类特定的插件,即所谓的数据插件,因为正是这类给我带来了问题。我有一类用于帐户的数据插件,一类用于交易等。
我正在进行大规模的重构,这给我留下了以下数据插件架构:
- 数据插件对象(实现初始化、安装和插件元数据)[实现
IDataPlugin<FactoryType>
] - 数据对象(例如帐户)[实现,例如
IAccount
] - 创建数据对象实例的工厂[实现,例如
IAccountFactory
]
以前数据对象和插件对象合二为一,但这意味着账户中记录的每笔交易都必须实例化一个新的交易插件,这导致了许多问题。不幸的是,这种重构破坏了我的消息传递。数据对象实现INotifyPropertyChanged
了,所以我遇到了一个新问题,我不确定如何解决:插件对象正在向消息代理注册事件,但实际上是数据对象触发了事件。这意味着订阅插件当前必须订阅每个创建的帐户,交易等! 这显然是不可扩展的。
据我目前所知,我有两种可能的解决方案:
- 使数据插件对象成为数据对象和消息代理的中间人,可能批量更改通知。我不喜欢这样,因为它给消息传递系统增加了另一层复杂性,我觉得我应该可以不用。
- 垃圾当前基于事件的实现并使用其他更易于管理的东西(内存中 WCF?!)。
所以我想我真的在问:
- 你将如何解决这个问题?
- 您认为我忽略了哪些潜在的解决方案?
- 我的方法甚至模糊地走上正轨/明智吗?!:-)
正如您从博客文章的日期中可以看出的那样,这个问题的某些变体已经让我感到很长一段时间了!因此,我们将不胜感激任何和所有的回应。
框架本身的背景如下:
我的插件框架由三个主要组件组成:插件代理、首选项管理器和消息代理。插件代理负责插件的基本工作:发现和创建插件。首选项管理器管理框架和各个插件的用户首选项,例如启用了哪些插件,数据应该保存在哪里等。通过发布/订阅进行通信,消息代理位于中间,收集所有发布的消息类型和管理订阅。发布/订阅当前是通过 .NET
INotifyPropertyChanged
接口实现的,该接口提供了一个名为PropertyChanged
; 消息代理建立一个所有插件实现的列表INotifyPropertyChanged
并订阅其他插件此事件。消息传递的目的是让账户和交易插件通知存储插件数据发生了变化,以便保存。
oop - 对象之间的消息传递 - 如何引用目标对象?
面向对象环境中最基本的任务是在对象上执行方法。为此,您必须拥有对正在调用该方法的对象的引用。建立此引用以将对象作为参数传递给调用对象的构造函数(或初始化方法)的正确方法是什么?
如果 object foo
调用 object bar
,是否正确地说(在伪代码中):
如果您需要来回传递消息会发生什么?您需要注册目标对象的方法吗?
有没有解决这个问题的模式?
scheme - 将此 Scheme 函数转换为不同的形式?
因此,这是将 sum 定义为消息传递对象的一种方法:
但这可以重写为:
如何将我编写的用于将产品定义为消息传递对象的函数更改为上面的第二种格式?这是我写的代码:
c# - C#/.Net 相当于 NSNotification
我是一名将应用程序移植到 .Net 世界的 Objective-C 开发人员。在我的 Obj-C 应用程序中,我使用 NSNotification 对象在少数对象之间进行异步通信。有没有办法在 .Net 世界中做类似的事情(更具体地说,使用 C# 语言)?基本方法是一个对象发布一个或多个对象监听的通知。
可能有一种明显的方法可以做到这一点,但我还没有找到它......
delphi - 如何找出通过打开具有自定义文件扩展名的文件触发的文件的路径?
如何获取用于打开程序的文件的位置?
示例:如果我创建一个新的扩展名“.xyz”,并告诉 Windows 我想用 myapplication 打开文件类型 .xyz,那么它会启动我的应用程序。太好了,但是我的应用程序如何获得用于启动它的文件的文件路径的句柄?
另外,有没有办法让我的应用程序的一个版本只运行并打开新文件以调用我的应用程序中的方法?例如,如果您使用 torrent 并打开 5 个 .torrent 文件,它们都只会传递给一个应用程序。
附带问题:所有文件扩展名都是 3 个字母长吗?是否有公开使用的列表?如果我创建一个文件扩展名,我不想使用一个已经使用过的。
delphi - 如何将字符串从我的 Delphi 程序的一个实例发送到另一个实例?
将字符串从我的程序的一个实例发送到我的程序的另一个实例的最佳和最简单的方法是什么?接收程序必须执行一个过程,使用接收到的字符串作为参数。
我开始阅读有关 DDE 的内容,但我感到困惑。我还有哪些其他选择,最简单的方法是什么?
language-agnostic - 使用消息传递进行性能评估
我必须使用 MPI 构建分布式应用程序。我必须做出的决定之一是如何将类的实例映射到进程中(然后映射到机器中),以便从分布式环境中获得最大的优势。
我的问题是:有一个模型可以让我选择更好的映射吗?我的意思是,有些安排肯定是错误的(例如,将两个对象放入两台不同的机器中,这两个对象应该以顺序方式一起处理相当大量的数据,没有要处理的令牌流),但是有一种系统的方法确定这样的错误安排,由执行流程、消息复杂性、算法组件完成的计算所花费的时间决定?
concurrency - 为并发编程语言选择一致性模型
我处于编程语言的设计阶段,目前正在考虑并发方面。我需要找出一个一致性模型,即用这种语言编程的并发进程如何处理数据。
有两个重要的标准:
- 我更喜欢易用性而不是性能,只要一致性模型允许良好的扩展,
- 我不能使用需要阻塞或动态内存分配的一致性模型。
我现在的两个候选人一方面是非阻塞软件事务内存,另一方面是在不共享la Erlang的情况下复制消息传递语义。
我特别担心易用性,所以我将介绍我反对这两个模型的主要论点。
在 STM 的情况下,用户必须了解类的哪些成员必须以原子方式改变并正确界定原子代码段。这些必须写成可以重复未定义的次数,它们不能执行任何 I/O,不能调用一些外部函数等。我认为这对于没有经验的程序员来说远非易事。
Erlang 风格的无共享并发很有吸引力,但有一个问题:实时进程无法复制它们发送过来的对象,因为它们无法执行任何内存分配,因此对象必须从一个进程“移动”到另一个进程通过队列。用户必须知道,如果一个实时进程对一个对象有两个引用,那么如果他将对象发送到另一个进程,这两个引用都将被清除。这有点像在任何使用点都可能为空或不为空的弱指针:这可能令人惊讶。
我倾向于第二种模型,因为它看起来更容易理解,并且自然地扩展到分布式系统。
你有什么建议吗?
- 非阻塞软件事务内存?
- Erlang 风格的并发具有实时约束的困难?
- 还有什么我没有考虑过的?
java - Java:在客户端和 servlet 之间传递消息的适当方式?
我的系统成功地将对象从客户端传递到 servlet。然而,它是原始的,因为它是为迎合 Java 1.1 而构建的。它传递的消息对象由一个 int (代表大约七十种类型之一)和一个需要解析的令牌字符串组成(令牌可能包含一个列表、对象列表等)。不好!
因此,我希望将其重构为 Java 1.5。使用 enum 而不是 int 肯定是一种改进,但我不确定如何发送其余的消息。创建 70 个不同的类来表示每种类型肯定不是正确的方法。
关于我应该如何重构它的任何指示?
rpc - RPC 在消息传递方面的缺点是什么?
RPC 在消息传递方面的缺点是什么?