4

ASP.NET MVC アプリケーションがあり、サーバー送信イベントを使用しています。アプリケーションは正常に動作しますが、どのように動作するかについていくつか質問があります。以下はコントローラーのコードです。

public class HomeController : Controller
    {
        //
        // GET: /Home/
        public ActionResult Index()
        {
            ViewBag.Message = "SSE WITH ASP.NET MVC";
            return View();
        }
        public ActionResult Message() 
        {
          var result = string.Empty;
          var sb = new StringBuilder();
          sb.AppendFormat("data: {0}\n\n", DateTime.Now.ToString());
          return Content(sb.ToString(), "text/event-stream");

      }
    }

以下はビューコードです。

<script>

    function contentLoaded() {
        var source = new EventSource('home/message');
        //var ul = $("#messages");
        source.onmessage = function (e) {

            var li = document.createElement("li");
            var returnedItem = e.data;
            li.textContent = returnedItem;
            $("#messages").append(li);
        }
    };

    window.addEventListener("DOMContentLoaded", contentLoaded, false);
</script>
<h2>@ViewBag.Message</h2>
<p>
    SSE WITH ASP.NET MVC
</p>
<ul id="messages">
</ul>

私の質問は次のとおりです。1. 時間は 3 秒ごとにのみ更新されます。なぜそうなのですか?2.コントローラーアクションが呼び出される頻度を決定する方法は?

4

1 に答える 1

10

時刻は 3 秒ごとにのみ更新されます。なぜそうなのですか?

単一のデータを含む をController返し、接続を閉じているため、ブラウザは3 秒待ってから再度開きます。ActionResult

コントローラーアクションが呼び出される頻度を決定する方法は?

loops とdelaysを使用して、他のメソッドが呼び出される頻度を決定するのと同じ方法です。

SSE はServer Sent Events です。これらすべてをサーバー側から管理します。接続を明示的に開いたままにしておく場合にのみ適切に機能します。それ以外の場合は、代わりにクライアントから AJAX ポーリングを行うこともできます。

于 2013-09-22T11:02:26.370 に答える