为什么COM DLL被称为';服务器';?

为什么COM DLL被称为';服务器';?,dll,com,terminology,Dll,Com,Terminology,为什么COM DLL被称为“服务器” 我意识到COM客户端将通过创建对象和调用函数等方式使用COM DLL 但“服务器”是指在操作系统中运行的实际进程。那么,为什么术语“服务器”应用于COM DLL?术语“服务器”的含义相当松散,因为它是一个提供服务的组件。特定组件可能作为进程内DLL提供这一事实是一个实现细节。DLL为客户端提供服务。所以类似于网络中的客户机-服务器模型,我们也将DLL称为服务器。这就是模型和术语的定义方式。有客户端和服务器。此术语不受特定COM服务器的托管方式或特定COM客户

为什么COM DLL被称为“服务器”

我意识到COM客户端将通过创建对象和调用函数等方式使用COM DLL


但“服务器”是指在操作系统中运行的实际进程。那么,为什么术语“服务器”应用于COM DLL?

术语“服务器”的含义相当松散,因为它是一个提供服务的组件。特定组件可能作为进程内DLL提供这一事实是一个实现细节。

DLL为客户端提供服务。所以类似于网络中的客户机-服务器模型,我们也将DLL称为服务器。

这就是模型和术语的定义方式。有客户端和服务器。此术语不受特定COM服务器的托管方式或特定COM客户端与所述服务器的连接方式的影响——这会让人感到困惑!)

(DLL本身不是COM服务器:相反,COM DLL包含COM服务器。)

在理想情况下,没有理由需要区分进程外COM对象(其托管方式类似于单独进程中服务器的“经典”定义)和进程内COM对象。然而,仅仅因为它是进程内的并不意味着它是直接访问,COM将跨线程边界封送!(在这种情况下,“经典服务器”的物理表现形式仍然适用,只是在子进程级别。)

我想。我认为与其只比较库或类,不如将其与进行比较。也就是说,COM还定义了通信规则。这在大多数库中并不存在,例如JAR文件或非COM DLL中的类,它们实际上只包含“要执行的代码”

快乐编码


以下是我认为相关的一个例子:

组件对象模型+(COM+)是由Microsoft定义的二进制互操作性标准,它指定了分布式对象通信的模型COM+通过将对象分为客户端和服务器来定义通信。客户端被定义为希望访问特定服务的对象,而服务器是一个提供服务的对象。客户机和服务器可以独立于定义它们的编程语言和它们之间的操作系统进行通信


您已经回答了自己的问题:因为DLL由“客户端”应用程序使用,它向这些应用程序提供服务。因此,将其称为“服务器”是最合适的心智模型。@CodyGray:那么在Java中,你会用同样的方式将
.jar
文件称为“服务器”吗?我对Java一无所知。
.jar
文件是代码文件还是可执行文件?@CodyGray:
.jar
文件类似于类的编译库。Java程序可以创建在
.jar
文件中定义的对象,就像可以从COM DLL中创建对象一样,但是没有人将
.jar
.class
文件称为“服务器”。不知道COM服务器实际上是如何实现的在COM中是一件非常重要的事情。您可以使用CoCreateInstance()的CLSCTX参数来声明您的首选项,但实际得到的是由配置决定的。例如,在COM+和COM代理中经常利用。您可以获取一个EXE来托管服务器。或者远程机器。一个服务器。似乎“服务器”这个词不适合作为代码库来创建对象等的文件。我仍然认为您需要一个进程来将其作为服务器。有一套奇特规则的类库并不能使它成为服务器。@GaryJones参见第一段。此外,在同一个进程中存在多个“服务器”是完全有效的,这就是跨线程封送所要做的。这是使用的术语,考虑到COM的巨大范围,这是非常有意义的。进程内DLL只是一种表现形式,进程外EXE也是如此,但两者仍然遵循相同的“奇特规则集”:@GaryJones在COM意义上也指服务器,指的是逻辑交互/模型,而不是物理表现形式——尽管如上文所述(以及为解释该术语的有效性),进程内和进程外都有物理“服务器”表现形式。DLL本身不是COM服务器。