任何人都可以请教我当前的.NET套接字技术吗?
非阻塞套接字
如果我设置Socket.Blocking = false并使用异步操作 - 会发生什么?
是否有任何轮询多个非阻塞套接字的方法,而不是逐个检查它们的可用性(类似于普通的select()或任何其他机制,一些与IOCP相关的机制)除了Socket.Select( )?
BeginXXX和SocketAsyncEventArgs
他们是否正在操作引擎盖下的阻塞套件并隐藏线程创建?
手动创建线程是否等于使用BeginXXX方法?
有没有其他专业人士使用SocketAsyncEventArgs,那么它是否允许创建套接字池以及与它们相关的所有内容?
最后一个问题:如果app作为某种负载很重的二进制代理工作,大多数逻辑在单线程中完成 - 什么提供了更好的可伸缩性:非阻塞方法或异步操作?
答案 0 :(得分:2)
1:Socket.Select
应该这样做,尽管我不倾向于亲自使用这种方法;特别是那些IList
在高容量时会感到烦恼
2:不,反过来;阻塞操作基本上是在后台使用非阻塞,但是使用门。不,他们不会在引擎盖下创建线程 - 除非你在入站时计算回调。我在这里有一个使用SocketAsyncEventArgs
提供12k连接的示例 - 线程计数类似于20. SocketAsyncEventArgs
的意图是:
对于可伸缩性:async