有大神分享一下 Socket.DuplicateAndClose 的使用经验吗?
1
hjc4869 2017-10-15 22:22:17 +08:00 1
|
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 1
@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) 的属性。 |