1

を使用して IG インデックス ストリーミング API に接続しようとしており、このチュートリアルhttp://www.lightstreamer.com/docs/client_generic_base/Network%20Protocol%20Tutorial.pdfLightStreamerに取り組んでいます。

次の手順を実行して、ストリーミング セッション (16 ページ 4.1 - /lightstreamer/create_session.txt) を正常に作成しました。

public void ConnectToLightStreamer(Credentials credentials)
{
    var LightStreamerRequest = (HttpWebRequest)WebRequest.Create(credentials.LIGHTSTREAMERENDPOINT + "/lightstreamer/create_session.txt");
    LightStreamerRequest.Method = "POST";
    LightStreamerRequest.ContentType = "application/x-www-form-urlencoded";
    LightStreamerRequest.Headers.Add("Cache-Control", "no-cache");

    using (var streamWriter = new StreamWriter(LightStreamerRequest.GetRequestStream()))
    {
        string Body = "LS_user=" + credentials.CLIENTID + "&LS_password=CST-" + credentials.CST + "|XST-" + credentials.SECURITY_TOKEN + "&LS_adapter_set=DEFAULT&LS_polling=true&LS_polling_millis=0&LS_idle_millis=0&LS_report_info=true";

        streamWriter.Write(Body);
        streamWriter.Flush();
        streamWriter.Close();
    }

    var httpResponse = (HttpWebResponse)LightStreamerRequest.GetResponse();
    Stream stream = httpResponse.GetResponseStream();

    using (stream)
    {
        StreamReader reader = new StreamReader(stream, Encoding.UTF8);
        string responseString = reader.ReadToEnd();

        string[] SessionData = responseString.Split(new string[] { Environment.NewLine }, StringSplitOptions.None);

        string[] sessionID = SessionData[1].Split(':');
        credentials.SESSIONID = sessionID[1];

        string[] controlAddress = SessionData[2].Split(':');
        credentials.CONTROLADDRESS = controlAddress[1];

        Console.WriteLine(responseString);
        Console.WriteLine("CONNECTED");
        Console.WriteLine(Environment.NewLine);
        Console.WriteLine(Environment.NewLine);                
    }
}

次のようにして、セッションを正常にバインドできました (18/19 ページ、/lightstreamer/bind_session.txt)。

 public void BindSession(Credentials credentials)
{
    var LightStreamerRequest = (HttpWebRequest)WebRequest.Create(credentials.LIGHTSTREAMERENDPOINT + "/lightstreamer/bind_session.txt");
    LightStreamerRequest.Method = "POST";
    LightStreamerRequest.ContentType = "application/x-www-form-urlencoded";
    LightStreamerRequest.Headers.Add("Cache-Control", "no-cache");

    using (var streamWriter = new StreamWriter(LightStreamerRequest.GetRequestStream()))
    {

        string Body = "LS_user=" + credentials.CLIENTID + "&LS_session=" + credentials.SESSIONID + "&LS_password=CST-" + credentials.CST + "|XST-" + credentials.SECURITY_TOKEN + "&LS_adapter_set=DEFAULT&LS_polling=true&LS_polling_millis=0&LS_idle_millis=0&LS_report_info=true&LS_polling_millis=1000";

        streamWriter.Write(Body);
        streamWriter.Flush();
        streamWriter.Close();
    }

    var httpResponse = (HttpWebResponse)LightStreamerRequest.GetResponse();
    Stream stream = httpResponse.GetResponseStream();

    using (stream)
    {
        StreamReader reader = new StreamReader(stream, Encoding.UTF8);

        string responseString = reader.ReadToEnd();

        Console.WriteLine("BIND: " + responseString);
    }
}

私の問題は、セッションを作成し、どの情報をどのように送信する必要があるかを考えています。ページ 20/21 /lightstreamer/control.txt。

私は次のものを持っていますが、応答がないため、間違っていることはわかっています。

public void ControlStreamer(Credentials credentials)
{
    var LightStreamerRequest = (HttpWebRequest)WebRequest.Create(credentials.LIGHTSTREAMERENDPOINT + "/lightstreamer/control.txt");
    LightStreamerRequest.Method = "POST";
    LightStreamerRequest.ContentType = "application/x-www-form-urlencoded";
    LightStreamerRequest.Headers.Add("Cache-Control", "no-cache");

    using (var streamWriter = new StreamWriter(LightStreamerRequest.GetRequestStream()))
    {

        string Body = "LS_user=" + credentials.CLIENTID + "&LS_password=CST-" + credentials.CST + "|XST-" + credentials.SECURITY_TOKEN + "&LS_session=" + credentials.SESSIONID + "&LS_polling=true&LS_polling_millis=0&LS_idle_millis=0&LS_report_info=true&LS_polling_millis=1000&LS_table=" + credentials.SESSIONID + "&LS_op=add&LS_schema=MARKET:IX.D.DOW.DAILY.IP&LS_id=1&LS_mode=MERGE";

        streamWriter.Write(Body);
        streamWriter.Flush();
        streamWriter.Close();
    }

    var httpResponse = (HttpWebResponse)LightStreamerRequest.GetResponse();
    Stream stream = httpResponse.GetResponseStream();

    using (stream)
    {
        StreamReader reader = new StreamReader(stream, Encoding.UTF8);

        string responseString = reader.ReadToEnd();

        Console.WriteLine("CONTROL: " + responseString);
    }
}

私はフルタイムの開発者になって約 1 年になりますが、このプロジェクトは私の限界と理解の限界に達しています。

私はこのプロジェクトを 2 日間以上行っていますが、ドキュメントをほとんど理解できません。

誰かが私が間違っていることを説明したり、実際の例を教えてくれたりしたら、とても感謝しています。

4

1 に答える 1

3

アプリケーションが C# に基づいている場合、プロトコルを自分で実装する必要はありませんが、既製のクライアント ライブラリを使用する方がはるかに優れています。より高いレベルの抽象化を提供し、より堅牢で十分にテストされています。

https://labs.ig.com/lightstreamer-downloadsからクライアント ライブラリをダウンロードし、完全なドキュメントとサンプルにアクセスできます。

あなたが言及したネットワーク プロトコルのチュートリアルは、利用可能な Lightstreamer クライアント ライブラリのいずれにも含まれていないテクノロジに基づいてアプリケーションを開発する必要がある場合にのみ役立ちます。

于 2015-10-25T18:31:31.653 に答える