这两种机制的区别和联系是什么呢?请大家踊跃发言!
12 个解决方案
#1
连接点 是标准接口,因此所有支持COM的语言都知道它是用来响应事件的
回调接口没怎么听说过,不过我想只要你愿意,你随时可以给COM服务器一个接口,让他在完成操作后执行这个接口的一个函数。
COM本质论的在引入连接点的时候就以一个回调的例子开始的
我认为:
连接点是回调接口(如果有谁这么用的话)的标准化后的接口,它也是一种回调接口
回调接口没怎么听说过,不过我想只要你愿意,你随时可以给COM服务器一个接口,让他在完成操作后执行这个接口的一个函数。
COM本质论的在引入连接点的时候就以一个回调的例子开始的
我认为:
连接点是回调接口(如果有谁这么用的话)的标准化后的接口,它也是一种回调接口
#2
原理上似乎相同,实际上有很大的不同,回调接口只能在调用者的线程上下文中被调用,而连接点能在同一个线程、跨线程、跨进程甚至跨机器被调用,事件响应接口被调用发生在建立连接的线程上下文,因为COM调用是需要列集的,这增加了透明性,减少了线程同步工作量。
所以如果使用了COM,最好同时使用连接点,因为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环境上。
难道仅仅是连接点机制里面多了“可连接对象”?疑惑。。。
http://www.vckbase.com/document/viewdoc/?id=1525
http://www.vckbase.com/document/viewdoc/?id=1538
第二篇文章后面写道:
如果你只想完成简单的“通知”功能,那么前一回中的“回调接口”是一个明智的方案,并且可以运行在DCOM环境上。
难道仅仅是连接点机制里面多了“可连接对象”?疑惑。。。
#6
原因是老杨的代码为了实现高性能,没有做链接点接口该做的事情
如果你的接口想被另外一个机器上的代码调用,你需要首先把这个接口Marshal,然后把Marshal后的代码传给服务器端,对方Unmarshal
如果你的接口想被另外一个机器上的代码调用,你需要首先把这个接口Marshal,然后把Marshal后的代码传给服务器端,对方Unmarshal
#7
ding
#8
对于实现Event通知来说,回调接口和连接点都可以实现;
连接点可在其他语言中扩展Sink,而回调接口就比较麻烦。
连接点可在其他语言中扩展Sink,而回调接口就比较麻烦。
#9
mk
#10
回调接口的代价应该小一些。不过应该范围较窄
#11
xuexi
#12
wow,楼主还没给分揭帖啊:)代价不一定小哦,除非你针对情况特殊设计,如自己做特殊的marshal。除非特殊原因,还是建议用连接点
#1
连接点 是标准接口,因此所有支持COM的语言都知道它是用来响应事件的
回调接口没怎么听说过,不过我想只要你愿意,你随时可以给COM服务器一个接口,让他在完成操作后执行这个接口的一个函数。
COM本质论的在引入连接点的时候就以一个回调的例子开始的
我认为:
连接点是回调接口(如果有谁这么用的话)的标准化后的接口,它也是一种回调接口
回调接口没怎么听说过,不过我想只要你愿意,你随时可以给COM服务器一个接口,让他在完成操作后执行这个接口的一个函数。
COM本质论的在引入连接点的时候就以一个回调的例子开始的
我认为:
连接点是回调接口(如果有谁这么用的话)的标准化后的接口,它也是一种回调接口
#2
原理上似乎相同,实际上有很大的不同,回调接口只能在调用者的线程上下文中被调用,而连接点能在同一个线程、跨线程、跨进程甚至跨机器被调用,事件响应接口被调用发生在建立连接的线程上下文,因为COM调用是需要列集的,这增加了透明性,减少了线程同步工作量。
所以如果使用了COM,最好同时使用连接点,因为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环境上。
难道仅仅是连接点机制里面多了“可连接对象”?疑惑。。。
http://www.vckbase.com/document/viewdoc/?id=1525
http://www.vckbase.com/document/viewdoc/?id=1538
第二篇文章后面写道:
如果你只想完成简单的“通知”功能,那么前一回中的“回调接口”是一个明智的方案,并且可以运行在DCOM环境上。
难道仅仅是连接点机制里面多了“可连接对象”?疑惑。。。
#6
原因是老杨的代码为了实现高性能,没有做链接点接口该做的事情
如果你的接口想被另外一个机器上的代码调用,你需要首先把这个接口Marshal,然后把Marshal后的代码传给服务器端,对方Unmarshal
如果你的接口想被另外一个机器上的代码调用,你需要首先把这个接口Marshal,然后把Marshal后的代码传给服务器端,对方Unmarshal
#7
ding
#8
对于实现Event通知来说,回调接口和连接点都可以实现;
连接点可在其他语言中扩展Sink,而回调接口就比较麻烦。
连接点可在其他语言中扩展Sink,而回调接口就比较麻烦。
#9
mk
#10
回调接口的代价应该小一些。不过应该范围较窄
#11
xuexi
#12
wow,楼主还没给分揭帖啊:)代价不一定小哦,除非你针对情况特殊设计,如自己做特殊的marshal。除非特殊原因,还是建议用连接点