C# でサーバーからライブ (連続) データを取得するにはどうすればよいですか?
HTTPWebRequest を開きますが、サーバーはその要求を完了しません。サーバーは 20 秒ごとにテキスト データを送信します。テキスト データを処理し、10 分後にサーバーが要求を完了してからユーザーに表示したいと考えています。
C# でサーバーからライブ (連続) データを取得するにはどうすればよいですか?
HTTPWebRequest を開きますが、サーバーはその要求を完了しません。サーバーは 20 秒ごとにテキスト データを送信します。テキスト データを処理し、10 分後にサーバーが要求を完了してからユーザーに表示したいと考えています。
HTTP はセッション プロトコルではありません。このように動作するように意図されていました
できることは、基本的TCPClient / Socket
に代わりに使用することです。これにより、HTTP の下位層に移動し、永続的な接続を作成できます。
あなたの人生を楽にするさまざまなフレームワークがあります。
また、Cometもご覧ください。
WebClient のストリーミング API を使用できます。
var client = new WebClient();
client.OpenReadCompleted += (sender, args) =>
{
using (var reader = new StreamReader(args.Result))
{
while (!reader.EndOfStream)
{
string line = reader.ReadLine();
// do something with the result
// don't forget that this callback
// is not invoked on the main UI thread so make
// sure you marshal any calls to the UI thread if you
// intend to update your UI here.
}
}
};
client.OpenReadAsync(new Uri("http://example.com"));
Twitter Streaming API を使用した完全な例を次に示します。
using System;
using System.IO;
using System.Net;
class Program
{
static void Main()
{
var client = new WebClient();
client.Credentials = new NetworkCredential("username", "secret");
client.OpenReadCompleted += (sender, args) =>
{
using (var reader = new StreamReader(args.Result))
{
while (!reader.EndOfStream)
{
Console.WriteLine(reader.ReadLine());
}
}
};
client.OpenReadAsync(new Uri("https://stream.twitter.com/1.1/statuses/sample.json"));
Console.ReadLine();
}
}