SignalR ist eine von Microsoft entwickelte Client- und Server-Bibliothek. Besser beschreibt das Dino Esposito:

SignalR ist eine integrierte Client- und Server-Bibliothek, die browserbasierten Clients und ASP.NET-basierten Serverkomponenten die bidirektionale und mehrstufige Kommunikation ermöglicht.

Anders ausgedrückt ist die Kommunikation nicht auf einen einzelnen, statusfreien Datenaustausch des Typs Anforderung/Antwort beschränkt, sondern sie dauert an, bis sie ausdrücklich beendet wird. Die Kommunikation findet über eine dauerhafte Verbindung statt, wobei der Client mehrere Nachrichten an den Server senden kann, auf die der Server antwortet. Und vor allem kann der Server asynchrone Nachrichten an den Client senden.”

Ein einfacher Chat

image

Im folgenden, zeige ich wie immer kurz und knackig, ein absolut einfaches Beispiel für die Verwendung bzw. den Einsatz von SignalR.

1.) Mittels NuGet installieren wir SignalR:

Install-Package SignalR

Folgende Komponenten werden dabei installiert und referenziert:

  • Newtonsoft.Json 4.5.7.
  • SignalR.Server 0.5.2.
  • SignalR.Hosting.Common 0.5.2.
  • SignalR.Hosting.AspNet 0.5.2.
  • jQuery 1.6.4.
  • SignalR.Js 0.5.2.
  • SignalR 0.5.2.

2.) Anschließend schreiben wir eine Klasse, die von der Klasse SignalR.Hubs.Hub ableitet:

public class SimpleChatHub : Hub
{
    public void Send(string nickname,string message)
    {
        Clients.HandleMessage(string.Format("{0} wrotes on {2}: {1}", nickname, message, DateTime.Now.ToShortTimeString()));
    }
}

3.) Für das Anzeigen von Informationen referenzieren die notwendigen Scripte und erstellen uns ein paar Felder

(Hinweis: Um die Nachricht mittels Entertaste zu senden, verwende ich zur Hilfe das Plugin JQByte OnEnter.)

<script type="text/javascript" src='@Url.Content("~/Scripts/jquery.signalR-0.5.2.js")'></script>
<script type="text/javascript" src='@Url.Content("~/Scripts/jquery.OnEnter.js")'></script>
<script type="text/javascript" src="@Url.Content("/signalr/hubs")"></script>

<h3>Simple SignalR Chat:</h3>
<input type="text" id="nickname" />
<input type="text" id="msg" onenter="SendMessage();" />
<button id="sendBtn">Send</button>
<ul id='messages'></ul>

4.) In einem Script dann, starten wir unseren SimpleChatHub und handlen das Versenden der Nachrichten.

<script type="text/javascript">

    var hub;
    $(document).ready(function () {
        $('#nickname').val('').focus();

        ConnectingChatHub();
        hub.HandleMessage = function (message) {
            $('<li>').text(message).prependTo('#messages');
        };

        $('#sendBtn').click(function (){ SendMessage()});
    });


    function ConnectingChatHub() {
        hub = $.connection.simpleChatHub;
        $.connection.hub.start()
        .done(function () { })
        .fail(function () { alert("Could not Connect!") });
    }

    function SendMessage() {
        var nickname = $('#nickname').val();
        var msg = $('#msg').val();
        if (msg != '') {
            hub.send(nickname, msg);
            $('#msg').val('').focus();
        }
    }


</script>

Das war’s auch schon, viel Spaß beim entwickeln : )

Achja, am 03.09.2012 gibt es einen .NET Online User Group Termin zum Thema SignalR mit Christian Weyer.

Erste Schritte mit SignalR
Markiert in:    

2 thoughts on “Erste Schritte mit SignalR

  • Pingback: KW34: SignalR, jQuery UI Datepicker, Google+ URLs und mehr - Der Softwareentwickler Blog

  • März 20, 2013 bei 09:25
    Permalink

    Hallo Mario,

    es sind immer die kleinen simplen Beispiele, die mir eine Technologie schmackhaft machen sollen. Ich habe gestern das erste Mal davon gehört und war zugleich enttäuscht, da es wieder mal von zu vielen „wenn’s“ abhängt. Da ist die eingeschränkte Verfügbarkeit von WebSockets und serverside Events. HTML 5 ist auch mehr oder weniger noch in den Kinderschuhen. Dann frag ich mich: was bleibt da noch? Was auch gestern in der Usergroup Regensburg von Christian Weyer nicht gezeigt wurde, war, was Fiddler zu diesem Thema offenbart. Auch dieser Artikel verrät mir nicht, was unter der Haube tatsächlich stattfindet und ich sehe auch noch nicht die Alltagstauglichkeit. Fragen der Sicherheit bleiben bislang offen – gerade das ist es aber, was für Businessanwendungen interessant ist.

    Wurde mir vor 1-2 Jahren Silverlight wie wild angepriesen, wo weiß ich, dass Microsoft mal eine Technologie „durchhält“? Wir haben solche Bestrebungen mit Remotescripting gehabt, dann hat Microsoft sein eigenes AJAX auf den Markt bringen wollen. Mit Silverlight sind sie offenbar auch nicht so schnell zum Erfolg gekommen (gleichwohl ich Silverlight für eine geniale Idee halte), nun kommen sie mit SignalR daher.

    Microsoft tut gut daran, mal ein Thema richtig und dauerhaft zu vertreten, damit man auch langfristig technologisch darauf vertrauen kann. Da wundert es mich nicht mehr, wenn Firmen dann auf JAVA ausweichen….

    Gruß

    Rene

Kommentare sind deaktiviert.