SslStream:使用可用的检查数据来执行轮询IO



不久前,我在vb.net中编写了一些基本的Http Web服务器。我尽量避免阻塞IO,所以基本上我为所有当前连接创建了一个轮询线程。

While True
    For Each oNetworkstream In lstNetworkstream
        If oNetworkstream.DataAvailable Then
            'Read from stream
        End If
    Next
End While

因此,每当一个连接有一些新数据时,我都可以读取它,否则立即检查下一个连接。

现在我正在使用https扩展Web服务器。因此,我使用了.Net SslStream类。我想应用相同的原理(一个轮询线程读取所有流)

由于没有.DataAvailable属性,我尝试width.Length>0,但这会产生NotSupportedException(此流不支持寻道操作)

Dim oSslStream As New SslStream(oStream, False)
oSslStream.AuthenticateAsServer(moCertificateKeyPair)
MsgBox(oSslStream.Length)

那么,我如何在不阻塞线程的情况下确定某个解密流是否有可用的数据呢?

当您有很多连接时,避免阻塞是个好主意。但民意调查并不是解决问题的方法

相反,您应该使用异步IO。让系统在数据准备就绪时通知您。

对于C#5,您应该使用async/await+ReadAsync。在较低的C#版本中,您应该使用基于任务的IO(IOW仍然使用ReadAsync是可用的)。如果不可用,请编写自己的版本。如果不能做到这一点,请使用BeginRead

相关内容

  • 没有找到相关文章

最新更新