假设我要使用命名管道跨进程通信。那么我的服务端进程是否要写一个死循环,等待客户端连接?像这样。
var namedPipeServerStream = new NamedPipeServerStream("SagoNamedPipeServer", PipeDirection.InOut, 1, PipeTransmissionMode.Byte); while (true) { namedPipeServerStream.WaitForConnection(); namedPipeServerStream.Write(null, 0, 0); }
然后客户端写一个死循环。不断的连接服务端,等待服务端写入数据?像这样
while (true) { var namedPipeClientStream = new NamedPipeClientStream(".", "SagoNamedPipeServer", PipeDirection.InOut, PipeOptions.Asynchronous); namedPipeClientStream.Connect(); namedPipeClientStream.Read(null, 0, 0); namedPipeClientStream.Close(); }
感觉这样不就是长连接了吗?感觉不是很好啊。还是我用得不对。这样如果服务端和客户端都要写要读,就比较麻烦了。我期望是不用写While死循环的。类似于事件机制的。当服务端监听到管道中有消息,那么就会触发一个事件。当客户端监听管道中有消息,也会触发一个事件。求高人讲解。IIS是怎么利用命名管道跨进程通信的。代码是我这么写的吗?感觉写死循环像屎一样搓。
服务端单开一个线程轮询有没有新的连接
但是在这个线程里,还是要写死循环。还是感觉很挫。用Task也行。细一想,难不成事件机制,也是这个原理?单独一个线程去监视。已有更改,就通知主线程?不会这么搓吧。事件机制不是应该高大上吗?