请问一下,COM的事件与通知里,回调接口机制和连接点机制的区别是什么?

时间:2022-04-03 19:44:45
rt,事件与通知有两种实现方式,分别为回调接口和连接点。
这两种机制的区别和联系是什么呢?请大家踊跃发言!

12 个解决方案

#1


连接点 是标准接口,因此所有支持COM的语言都知道它是用来响应事件的
回调接口没怎么听说过,不过我想只要你愿意,你随时可以给COM服务器一个接口,让他在完成操作后执行这个接口的一个函数。

COM本质论的在引入连接点的时候就以一个回调的例子开始的
我认为:

连接点是回调接口(如果有谁这么用的话)的标准化后的接口,它也是一种回调接口

#2


原理上似乎相同,实际上有很大的不同,回调接口只能在调用者的线程上下文中被调用,而连接点能在同一个线程、跨线程、跨进程甚至跨机器被调用,事件响应接口被调用发生在建立连接的线程上下文,因为COM调用是需要列集的,这增加了透明性,减少了线程同步工作量。
所以如果使用了COM,最好同时使用连接点,因为COM服务器可能存在于任何可能的位置,但你不一定知道。

#3


楼上的答案应该是正确的。

这里确实比较麻烦,容易把人搞糊涂。

#4


只要是COM接口,理论上都可以Marshal以后放到另外一台机器上执行,我觉得只能在同一个线程上下文执行不应该是一个限制。要知道,COM根本就回避了线程的概念,除非程序设计者自掘陷阱,否则怎么可能局限在同一个线程中?》

#5


我也有arong1234同样的疑问,既然都是COM接口,怎么不能远程调用呢?看了这两篇文章:
http://www.vckbase.com/document/viewdoc/?id=1525
http://www.vckbase.com/document/viewdoc/?id=1538

第二篇文章后面写道:
如果你只想完成简单的“通知”功能,那么前一回中的“回调接口”是一个明智的方案,并且可以运行在DCOM环境上。

难道仅仅是连接点机制里面多了“可连接对象”?疑惑。。。

#6


原因是老杨的代码为了实现高性能,没有做链接点接口该做的事情

如果你的接口想被另外一个机器上的代码调用,你需要首先把这个接口Marshal,然后把Marshal后的代码传给服务器端,对方Unmarshal

#7


ding

#8


对于实现Event通知来说,回调接口和连接点都可以实现;
连接点可在其他语言中扩展Sink,而回调接口就比较麻烦。

#9


mk

#10


回调接口的代价应该小一些。不过应该范围较窄

#11


xuexi

#12


wow,楼主还没给分揭帖啊:)代价不一定小哦,除非你针对情况特殊设计,如自己做特殊的marshal。除非特殊原因,还是建议用连接点

#1


连接点 是标准接口,因此所有支持COM的语言都知道它是用来响应事件的
回调接口没怎么听说过,不过我想只要你愿意,你随时可以给COM服务器一个接口,让他在完成操作后执行这个接口的一个函数。

COM本质论的在引入连接点的时候就以一个回调的例子开始的
我认为:

连接点是回调接口(如果有谁这么用的话)的标准化后的接口,它也是一种回调接口

#2


原理上似乎相同,实际上有很大的不同,回调接口只能在调用者的线程上下文中被调用,而连接点能在同一个线程、跨线程、跨进程甚至跨机器被调用,事件响应接口被调用发生在建立连接的线程上下文,因为COM调用是需要列集的,这增加了透明性,减少了线程同步工作量。
所以如果使用了COM,最好同时使用连接点,因为COM服务器可能存在于任何可能的位置,但你不一定知道。

#3


楼上的答案应该是正确的。

这里确实比较麻烦,容易把人搞糊涂。

#4


只要是COM接口,理论上都可以Marshal以后放到另外一台机器上执行,我觉得只能在同一个线程上下文执行不应该是一个限制。要知道,COM根本就回避了线程的概念,除非程序设计者自掘陷阱,否则怎么可能局限在同一个线程中?》

#5


我也有arong1234同样的疑问,既然都是COM接口,怎么不能远程调用呢?看了这两篇文章:
http://www.vckbase.com/document/viewdoc/?id=1525
http://www.vckbase.com/document/viewdoc/?id=1538

第二篇文章后面写道:
如果你只想完成简单的“通知”功能,那么前一回中的“回调接口”是一个明智的方案,并且可以运行在DCOM环境上。

难道仅仅是连接点机制里面多了“可连接对象”?疑惑。。。

#6


原因是老杨的代码为了实现高性能,没有做链接点接口该做的事情

如果你的接口想被另外一个机器上的代码调用,你需要首先把这个接口Marshal,然后把Marshal后的代码传给服务器端,对方Unmarshal

#7


ding

#8


对于实现Event通知来说,回调接口和连接点都可以实现;
连接点可在其他语言中扩展Sink,而回调接口就比较麻烦。

#9


mk

#10


回调接口的代价应该小一些。不过应该范围较窄

#11


xuexi

#12


wow,楼主还没给分揭帖啊:)代价不一定小哦,除非你针对情况特殊设计,如自己做特殊的marshal。除非特殊原因,还是建议用连接点