
有大神分享一下 Socket.DuplicateAndClose 的使用经验吗?
1 hjc4869 2017-10-15 22:22:17 +08:00 |
2 longaiwp 2017-10-15 22:29:32 +08:00 看代码是不支持的 |
3 noli OP |
4 hjc4869 2017-10-16 00:31:23 +08:00 via Android @noli 都上 .NET 了还玩个什么 worker 子进程,直接上线程池不就好? 用 Socket.Handle 把 fd 拿出来 P/Invoke 理论上是可以,但是还真没见过这么用的,而且 .NET Socket 也不能用 fd(handle)直接构造,传到另一个进程就只能用 native api 了。 |
5 wellsc 2017-10-16 00:38:00 +08:00 via iPhone 一个进程一个连接的话,消耗有点大。建议用线程或者协程处理网络连接 |
6 noli OP |
7 hjc4869 2017-10-16 00:51:33 +08:00 via Android @noli 可以让 listener 的进程做一个类似 proxy 的工作,用 TCP loopback/UNIX domain Socket/pipe 去连接后面的 worker 并且转发数据,如果能够接受这样的开销。 如果不能接受,大概就只能打开 Reuse address,然后起多个 listener 了。 |
8 noli OP |
9 noli OP @hjc4869 如果我没有理解错的话,TcpListener 已经考虑到 ReuseAddress 的需求,因此设计了 [TcpListener.ExclusiveAddressUse]( https://docs.microsoft.com/zh-cn/dotnet/api/system.net.sockets.tcplistener.exclusiveaddressuse?view=netcore-2.0) 的属性。 |