流没有结束
Stream does not end
我尝试使用以下代码编写一个使用 Server-Sent-Event 的客户端:
Public Shared Function OpenSSEStream(ByVal url As String, ByVal _token As String, ByVal _identifier As String, ByVal _environment As String) As Stream
Dim request = WebRequest.Create(New Uri(url))
CType(request, HttpWebRequest).AllowReadStreamBuffering = False
request.Headers.Add("Authorization:Bearer " + _token)
request.Headers.Add("environment:" + _environment)
request.Credentials = New NetworkCredential("id", _identifier)
Dim response = request.GetResponse()
Dim stream = response.GetResponseStream()
SSEApplication.ReadStreamForever(stream)
Return stream
End Function
Public Shared Sub ReadStreamForever(ByVal stream As Stream)
Dim encoder = New UTF8Encoding()
Dim buffer = New Byte(2047) {}
While True
If stream.CanRead Then
Dim len As Integer = stream.Read(buffer, 0, 2048)
If len > 0 Then
Dim text = encoder.GetString(buffer, 0, len)
End If
End If
End While
End Sub
这非常有效,因为我可以在文本变量中看到来自服务器(在调试模式下)的文本。不幸的是,如果我 运行 我进入中断模式的代码(不是调试)。我可以在调试模式下看到文本文件中填充了大约 2000 个数据集,看起来流没有结束并且 运行s 进入了一个无限循环左右?有人能帮我一下吗?
你需要退出循环,现在没有任何东西告诉它退出。
While True
If stream.CanRead Then
Dim len As Integer = stream.Read(buffer, 0, 2048)
If len > 0 Then
Dim text = encoder.GetString(buffer, 0, len)
Else
Exit While
End If
Else
Exit While
End If
End While
此外,流只能接收片段的信息。您应该连接数据。
Dim text As String = ""
While True
If stream.CanRead Then
Dim len As Integer = stream.Read(buffer, 0, 2048)
If len > 0 Then
text &= encoder.GetString(buffer, 0, len)
Else
Exit While
End If
Else
Exit While
End If
End While
这都可以重构
Dim streamData As New StringBuilder
While stream.CanRead
Dim len As Integer = stream.Read(buffer, 0, 2048)
If len > 0 Then
' There is the possibility that a Unicode character be split
streamData.Append(encoder.GetString(buffer, 0, len))
Else
Exit While
End If
End While
我尝试使用以下代码编写一个使用 Server-Sent-Event 的客户端:
Public Shared Function OpenSSEStream(ByVal url As String, ByVal _token As String, ByVal _identifier As String, ByVal _environment As String) As Stream
Dim request = WebRequest.Create(New Uri(url))
CType(request, HttpWebRequest).AllowReadStreamBuffering = False
request.Headers.Add("Authorization:Bearer " + _token)
request.Headers.Add("environment:" + _environment)
request.Credentials = New NetworkCredential("id", _identifier)
Dim response = request.GetResponse()
Dim stream = response.GetResponseStream()
SSEApplication.ReadStreamForever(stream)
Return stream
End Function
Public Shared Sub ReadStreamForever(ByVal stream As Stream)
Dim encoder = New UTF8Encoding()
Dim buffer = New Byte(2047) {}
While True
If stream.CanRead Then
Dim len As Integer = stream.Read(buffer, 0, 2048)
If len > 0 Then
Dim text = encoder.GetString(buffer, 0, len)
End If
End If
End While
End Sub
这非常有效,因为我可以在文本变量中看到来自服务器(在调试模式下)的文本。不幸的是,如果我 运行 我进入中断模式的代码(不是调试)。我可以在调试模式下看到文本文件中填充了大约 2000 个数据集,看起来流没有结束并且 运行s 进入了一个无限循环左右?有人能帮我一下吗?
你需要退出循环,现在没有任何东西告诉它退出。
While True
If stream.CanRead Then
Dim len As Integer = stream.Read(buffer, 0, 2048)
If len > 0 Then
Dim text = encoder.GetString(buffer, 0, len)
Else
Exit While
End If
Else
Exit While
End If
End While
此外,流只能接收片段的信息。您应该连接数据。
Dim text As String = ""
While True
If stream.CanRead Then
Dim len As Integer = stream.Read(buffer, 0, 2048)
If len > 0 Then
text &= encoder.GetString(buffer, 0, len)
Else
Exit While
End If
Else
Exit While
End If
End While
这都可以重构
Dim streamData As New StringBuilder
While stream.CanRead
Dim len As Integer = stream.Read(buffer, 0, 2048)
If len > 0 Then
' There is the possibility that a Unicode character be split
streamData.Append(encoder.GetString(buffer, 0, len))
Else
Exit While
End If
End While