我正在尝试使用 Twitter 流 API,试图打开一个流以便用户可以随时消费事件。我正在使用一组标准的类来进行对 Twitter 的 REST API 调用。当在 "GET" 调用中使用 https://userstream.twitter.com/2/user.json 时,响应流永远不会结束...... 我正在打开一个 StreamReader 并像处理其他 Twitter REST 调用一样读取响应。这对其他人可能很明显,但是我该如何“消耗”这个流呢?有没有一种方法可以在 StreamReader 关闭之前读取它(也就是在其读取过程中)?或者也许有一种不同的方法可以使用来消耗这个流... 再次感谢任何建议或帮助!!!
下面是我开始研究此问题时使用的原始源代码... 这个方法是从 LinkedIn 论坛上找到的一组 C# 类中编写的。在读取 "responseData = responseReader.ReadToEnd()" 这行代码时,该方法开始 "喝掉" 流... 但是像喝无底杯一样不断地读取这个数据流,直到我停止调试或终止进程为止,这就是我要解决的问题。
这段代码将打开的Twitter流写入文件,每次发推文、转推、删除、发送私信等操作时,JSON对象都会追加到文本中。我在这里使用了Do While 0 < 1进行测试,因为我只想看到它能否正常工作。在MSDN StreamReader Constructor Description上看到,新构造函数应该接受一个布尔值"leaveOpen",但是当我尝试将其添加到构造函数时,却没有允许这样的参数... 是否有人有一个很好的例子来实现此功能,强制执行无限循环或者有更好的方法呢?我希望能够简单地读取从Twitter发送的新更新,并相应地处理它们?显然有一种方法,我只是对像这样消耗流的概念还不熟悉...(**顺便说一句,感谢Dr. Evil的建议,引导我走向这个方向...虽然不完全是他建议的,但是是他让我走到这里)
下面是我开始研究此问题时使用的原始源代码... 这个方法是从 LinkedIn 论坛上找到的一组 C# 类中编写的。在读取 "responseData = responseReader.ReadToEnd()" 这行代码时,该方法开始 "喝掉" 流... 但是像喝无底杯一样不断地读取这个数据流,直到我停止调试或终止进程为止,这就是我要解决的问题。
Private Function WebResponseGet(ByVal webRequest As HttpWebRequest) As String
Dim responseReader As StreamReader = Nothing
Dim responseData As String = ""
Try
responseReader = New StreamReader(webRequest.GetResponse().GetResponseStream())
responseData = responseReader.ReadToEnd()
Catch
Throw
Finally
webRequest.GetResponse().GetResponseStream().Close()
responseReader.Close()
responseReader = Nothing
End Try
Return responseData
End Function
更新及相关问题:
所以,我找到了以下方法来保持流的开放,并将其写入文件(这不会是最终方法,我只是在测试和开发最佳方法:)
Private Sub DrinkIt(ByVal webRequest As HttpWebRequest)
Dim coder As Encoding = Encoding.UTF8
Dim stream_reader As New StreamReader(webRequest.GetResponse().GetResponseStream(), coder, True, 1024)
Do While 0 < 1
Dim w As IO.StreamWriter
w = File.AppendText(targetFile)
Dim c(5) As Char
stream_reader.Read(c, 0, c.Length)
w.Write(c)
w.Close()
w.Dispose()
Loop
stream_reader.Close()
stream_reader.DiscardBufferedData()
stream_reader.Dispose()
End Sub
这段代码将打开的Twitter流写入文件,每次发推文、转推、删除、发送私信等操作时,JSON对象都会追加到文本中。我在这里使用了Do While 0 < 1进行测试,因为我只想看到它能否正常工作。在MSDN StreamReader Constructor Description上看到,新构造函数应该接受一个布尔值"leaveOpen",但是当我尝试将其添加到构造函数时,却没有允许这样的参数... 是否有人有一个很好的例子来实现此功能,强制执行无限循环或者有更好的方法呢?我希望能够简单地读取从Twitter发送的新更新,并相应地处理它们?显然有一种方法,我只是对像这样消耗流的概念还不熟悉...(**顺便说一句,感谢Dr. Evil的建议,引导我走向这个方向...虽然不完全是他建议的,但是是他让我走到这里)