目前在.NET中编写Windows服务,我正在使用命名管道让其他进程与我的服务进行通信。在NamedPipeServerStream的更复杂的构造函数中,有一个参数,其描述性名称为maxNumberOfServerInstances。真棒。但这意味着什么?
MSDN的文档也有助于解释:
共享相同名称的最大服务器实例数。
好。这仍然没有真正告诉我这对我有什么影响,或者我如何利用它。如果NamedPipeServerStream也接受了“当我收到连接时运行此代码”的某个委托,那么这将是有意义的,然后每个“服务器实例”将运行该代码。但事实并非如此。
答案 0 :(得分:2)
这是一个奇怪的论点,您可以在基础Windows API function (CreateNamedPipe)的文档中找到更多关于它的信息。管道使用非常宝贵的资源用于管道缓冲区,它们是从非分页内核内存池中分配的。我认为这个参数有助于Windows优化池的使用。究竟如何做到这一点是无可救药的。
接受多个客户端连接的单个服务的完美数字是1.如果要运行所有执行相同工作的多个服务,则只会增加它。这非常罕见。
答案 1 :(得分:0)
我用我的 VB 代码测试了这个问题,并将数字设置为 2。
Sub Main()
Dim pipeserver As NamedPipeServerStream =
New NamedPipeServerStream("myPipe", PipeDirection.InOut, 2,
transmissionMode:=PipeTransmissionMode.Message)
pipeserver.WaitForConnection()
'some process
Console.ReadLine() 'do not exit until any key pressed
End Sub
使用这个程序,如果我尝试启动第三个实例(EXE),“所有管道实例都忙”会发生异常。
我必须关闭一个实例,以便在实例数量达到 2 时启动另一个实例。
所以我认为这个数字与客户端无关,它只是控制有多少管道服务器可以使用这个命名管道。