1

何時間ものグーグル検索の後、asp.net(MVCではない)を使用したイベントソースに関するサンプルが1つだけ見つかりました。最初に私はそれを学びたいと言わなければなりません。私の最終的な目標は、フレンドリーなポーカー Web サイトを作成することです。SignalR は私の目的には非常に適していますが、次のことを聞いたので、これを使用したくありません。

SignalR はパフォーマンスが悪い

そうじゃない?(そうじゃないといいけど)。私の問題は、サーバーがクライアントに応答を送信するときに、最新ではない前のテキストを送信することです:

$("#btnListen").click(function ()
        {
            var source = new EventSource('SSEHandler.ashx');
            source.addEventListener("open", function (event)
            {
                $('#headerDiv').append('Latest 5 values');
            }, false);
            source.addEventListener("error", function (event)
            {
                if (event.eventPhase == EventSource.CLOSED)
                {
                    $('#footerDiv').append('Connection Closed!');
                }
            }, false);
            source.addEventListener("message", function (event)
            {
                console.log(event.data);                   
            }, false);
        });

これが SSEHandler です。

 public class SSEHandler : IHttpHandler
{
    public bool IsReusable
    {
        get { return true; }
    }    

     public void ProcessRequest(HttpContext context)
    {
        HttpResponse Response;
        Response = context.Response;
        Response.ContentType = "text/event-stream"; 

        Response.Write(string.Format("data: {0}\n\n", "first"));
        Response.Flush(); //client has no response received yet 
        Response.Write(string.Format("data: {0}\n\n", "second"));
        Response.Flush();  //now client get "first".               
        Response.Close();

    }
}

このcodsクライアントコンソールを実行すると、「最初」しかありません。そして、これを SSEHandler の最後に追加すると:

Response.Write(string.Format("data: {0}\n\n", "third"));
Response.Flush(); 

クライアント コンソールには、「first」、「second」があります。私の長い投稿を読んでくれてありがとう。

4

1 に答える 1