ASP.NET ServerSendEvents MVC

Gast #5325951
Lesenswert?

Hi,

ich habe mir im Internet eine Methode gesucht um zu lernen wie man 
ServerSendEvents also Dynamisches nachliefern von Daten realisieren 
kann...
hierfür habe ich folgende C# Methode gefunden:
1
        private static BlockingCollection<string> _data = new BlockingCollection<string>();
2

3
        static HomeController()
4
        {
5
            _data.Add("started");
6
            for (int i = 0; i < 10; i++)
7
            {
8
                _data.Add("item" + i.ToString());
9
            }
10
            _data.Add("ended");
11
        }
12

13
        public ActionResult Message()
14
        {
15
            var result = string.Empty;
16
            var sb = new StringBuilder();
17
            if (_data.TryTake(out result, TimeSpan.FromMilliseconds(100)))
18
            {
19
                JavaScriptSerializer ser = new JavaScriptSerializer();
20
                var serializedObject = ser.Serialize(new { item = result, message = "hello" });
21
                sb.AppendFormat("data: {0}\n\n", serializedObject);
22
            }
23
            return Content(sb.ToString(), "text/event-stream");
24
        }

und dazu Passendes HTML
1
<script>
2
    function contentLoaded() {
3

4
        var source = new EventSource('message');
5
        //var source = new EventSource('home/message');
6
        var ul = document.getElementById("messages");
7

8

9
        console.log(source);
10

11
        source.onmessage = function (e) {
12

13

14

15
            var li = document.createElement("li");
16
            /*
17
            var returnedItem = e.data
18
            */
19

20
            li.textContent = e.data; //returnedItem.message + ' ' + returnedItem.item;
21

22
            ul.appendChild(li);
23
        }
24
    }
25

26
    window.addEventListener("DOMContentLoaded", contentLoaded, false);
27
</script>
28

29
<ul id="messages"></ul>


soweit so gut...
nun sendet mir der Server alle 3 Sekunden eine Nachricht <- eben von den 
10...

jetzt frag ich mich: "woher kommen die 3 Sekunden" und kann ich das 
steuern?
So wie ich das verstehe, arbeitet das EventSource mit einer art 
LongPolling, d.h. es wartet, wann neue Infos kommen...
=> ABER, ich kann nichts erkennen, was mit meine "Message()" aufruft 
oder triggert!?
... mit einem Sleep kann ich das ganze verzögern, aber ich will das ja 
beschleunigen, oder eben nur dann haben wenn auch Nachrichten kommen, 
dafür aber INSTANT.

Wäre sehr Nett, wenn mir das jemand "erklären" kann ;)

danke vielmals
arni
Gast #5326318
Lesenswert?

@T.roll
pass auf, wenn du Ahnung hast, dann kannst du mir helfen... dann nehm 
ich auch deine Belehrungen ernst...

wenn du hier deinen Namen zum Programm machen willst, ignoriere ich 
deine "bislang maximal schwachsinnigen Kommentare" denn die größten 
Botnetze sind auf Linuxbasis :P

Es geht mir nicht in den Kopf, dass Menschen nichts besseres zu tun 
haben als ohne irgendwelche Rahmenbedingungen zu kennen, zwar nicht 
helfen zu wollen, aber irgendein Bashing betreiben müssen (macht das 
irgendwie Glücklich? 20 mal am Tag irgendwelche Menschen geärgert ist 
ein guter Tag? ... ärger dich selbst oder bring dein Leben auf die 
Reihe).
=> Ein gut konfigurierter Windows-Server 2016 ist definitiv mit 
Hardware-Firewall & Co. ist definitiv sicherer als so manch ein Linux 
Server!
Abgesehen davon spreche ich von einem dedizierten Applikationsserver 
welcher sich in einem abgetrennten VLAN befindet ^^.

aber bevor ich mich jetzt weiterhin "rechtfertige" ... wer mit Lösungen 
kommt, kann auch mit "Warnungen" kommen. Wer einen IQ-Wert über sein 
Alter hat, fragt aber erstmal nach Rahmenbedingungn, bevor er etwas als 
definitiv "Unsicher" definiert ^^

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren