何時間ものグーグル検索の後、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」があります。私の長い投稿を読んでくれてありがとう。