Frage

Ich habe versucht, SSE-Technologie zu bekommen und konnte kein Problem lösen.Immer zwei Ereignisse ausgelöst onmessage und error.Ich habe ein gültiges Datum und gleichzeitig eine Fehlermeldung erhalten.Warum passiert das und wie kann man das lösen?Wie kann die Live-Zeit der Verbindung "Polltransport-Anfrage" verlängert werden??

Hier serverseitig

  public class HomeController : Controller
        {
            public ActionResult Message() 
            {
                JavaScriptSerializer ser = new JavaScriptSerializer();
                var serializedObject = ser.Serialize(new { item = "fuck", message = "hello" });
                var sb = new StringBuilder();
                sb.AppendFormat("data: {0}\n\n", serializedObject);

                return Content(sb.ToString(), "text/event-stream");
            }

            public ActionResult SEEIndex()
            {
                return View();
            }
        }

Hier Client-Javascript

$(document).ready(function () {

    var serverSentEvents = new window.EventSource('/Home/Message');  //home/message   /api/Event

    serverSentEvents.onmessage = function (e) {
        //$("#messages").append(e.data.item + '<br />');
        var data = JSON.parse(e.data);
        console.log('Yes! We get it, here is you data', data.item);
    };

    serverSentEvents.onerror = function (e) {
        console.log('error');
    };

    if (typeof (window.EventSource) !== "undefined") {
        console.log('Yes! Server-sent events support!');
    }
    else {
        console.log('Sorry! No server-sent events support..');
    }

});

Hier Bildschirme von konsolenprotokoll und Netzwerk Registerkarten im Google Chrome-Browser

War es hilfreich?

Lösung

Ihr serverseitiger Code muss kontinuierlich in das schreiben Response objekt, anstatt ein Ergebnis zurückzugeben:

using System.Threading;

public class HomeController : Controller {
    public ActionResult SEEIndex() {
        return View();
    }
    public void Message() {
        Response.ContentType = "text/event-stream";
        do {
            Response.Write("data: understandably\n");
            Response.Write("data: frustrated\n");
            Response.Write("\n");     //double newline signals the end of an event
            Response.Flush();
            Thread.Sleep(2000);       //wait 2 seconds before writing again
        } while (true)
    }
}

Die Rückgabe eines Ergebnisses schließt die Verbindung, was das auslöst EventSource.onerror.

Sehen hier für einige weitere Details.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top