什么决定了进程外COM服务器注意到客户端已经死亡的时间?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了什么决定了进程外COM服务器注意到客户端已经死亡的时间?相关的知识,希望对你有一定的参考价值。

在一个简单的Windows设置中,我们有一个COM单例,作为进程外服务器运行。

客户端通过调用cocreate进行连接,每个客户端都接收到服务器的同一实例的接口。

如果客户端正常关闭,则会释放其引用。

服务器有一些逻辑,可以在最后一次发布后的短时间内保持活动状态,以允许新的连接。

我对一个特殊情况感兴趣 - 服务器只运行一个崩溃的客户端(认为这是任何随机的未知崩溃),客户端退出而没有发布它的引用。

我观察到,在一段未定义的时间后说8分钟后,服务器会在服务器已将接口返回到客户端的任何对象的存根上接收释放调用。这似乎是一个自动清理,我假设是由LRPC层启动的。

这是在任何地方记录的,是否可以配置超时?

注意:整个过程中使用的多线程公寓模型。

答案

DCOM垃圾收集下的这个https://web.archive.org/web/20171228092925/http://www.microsoft.com/msj/0398/dcom.aspx似乎表明DCOM使用120秒的超时需要错过三次,因此大约6分钟客户端将被视为断开连接。不幸的是,它也表明它不是用户可配置的,我找不到任何相反的东西。

以上是关于什么决定了进程外COM服务器注意到客户端已经死亡的时间?的主要内容,如果未能解决你的问题,请参考以下文章

COM“进程外”服务器的 C++/CLI 等效项

带有 Python 的 COM 本地服务器(进程外)

Apache zeppelin 进程死亡

进程外 COM 服务器卡住

公寓是在服务器端还是在客户端“生活”在进程外环境中?

如何将 NotifyIcon 添加到 ATL 进程外服务器