Heim >Backend-Entwicklung >C#.Net-Tutorial >Ausführliche Erläuterung von Beispielen für die Implementierung von serverseitigem WebSocket-Instant Messaging mithilfe von .NET
In diesem Artikel werden hauptsächlich Beispiele für die Implementierung von Instant Messaging und WebSocket-Servern in .NET vorgestellt. Der Herausgeber findet es recht gut, daher werde ich es jetzt mit Ihnen teilen und als Referenz verwenden. Folgen wir dem Herausgeber und werfen wir einen Blick auf
Gängige Methoden für Instant Messaging
1. Es gibt zahlreiche Plattformen von Drittanbietern wie Google und Tencent Huanxin, darunter Google Instant Messenger, ist kostenlos, aber kostenlos bedeutet kostenlos und nicht einfach zu verwenden. Einige andere Drittanbieter erheben im Allgemeinen eine Gebühr und die Nutzungsanforderungen begrenzen den Datenfluss (1 Sekunde/maximal x Nachrichten) oder begrenzen die Anzahl der Benutzer.
Aber die Stabilität ist nicht schlecht und es kann den Servicedruck verringern
2. Außerdem kann es einen besseren Server schreiben. Es wurde vor .NET 4.5 häufiger verwendet und war umständlich zu verwenden. Es ist notwendig, die Datenpakete und andere Vorgänge zu analysieren (aber es scheint, dass es Methoden zur Verarbeitung extrem langer Pakete im Internet gibt)
3. System.Net.WebSockets.WebSocket, das ist etwas, das gekommen ist aus .NET 4.5 und ist sehr nützlich für die Serverumgebung. Es gibt auch Anforderungen, IIS8 und höher. Das bedeutet, dass der mit Windows Server 2008R2 gelieferte IIS dies nicht unterstützt, der mit Windows 8 und Server 2012 oder höher gelieferte IIS jedoch schon. Dieser Artikel beschreibt hauptsächlich die Beispiele dieser Methode
Der vollständige Prozess
1). Der Code lautet wie folgt:
ws = new WebSocket('ws://' + window.location.hostname + ':' + window.location.port + '/Handler1.ashx?user=' + $ ("#user" ).val());
2. Der Server erhält das Verbindungsobjekt
3). Verbindungsobjekt. Beginnen Sie mit dem Abhören (jeder Client und Server speichert lange Links). ;
CONNECT_POOL.Add(user, socket);
4). Client A sendet eine Nachricht an B
5). >6) Analysieren Sie den Nachrichtentext (B | Hallo, ich bin A) und rufen Sie die Empfänger-ID ab, suchen Sie im Verbindungspool nach dem Serververbindungsobjekt von B und senden Sie die Nachricht über das Verbindungsobjekt von B an den B-Client
ws.send($("#to").val() + "|" + $('#content').val());8). 🎜>
string userMsg = Encoding.UTF8.GetString(buffer.Array, 0, result.Count);
Das Folgende ist der vollständige Code
WebSocket destSocket = CONNECT_POOL[descUser]; await destSocket.SendAsync(buffer, WebSocketMessageType.Text, true, CancellationToken.None);
Client-Teil
Der Client ist äußerst einfach und verwendet WebSocket direkt Überwacht dann mehrereWebSocketReceiveResult result = await socket.ReceiveAsync(buffer, CancellationToken.None);Ereignisse von WebSocket
Es ist in Ordnung. Beim Herstellen einer Verbindung können Sie die ID des aktuellen Connectors (Benutzernummer) übergeben und beim Senden einer Nachricht die Methode „Empfänger-ID | Ich bin der Nachrichteninhalt“ verwenden, z. B. „A | Hallo A, ich bin B!“ "
ws.onmessage = function (evt) { $('#msg').append('<p>' + evt.data + '</p>'); }Es gibt jedoch immer noch einige häufige Szenarien, die bei der Verwendung mobiler Endgeräte bewältigt werden müssen1: Schalten Sie den Telefonbildschirm aus. Wenn IOS den Bildschirm ausschaltet, geht WebSocket sofort verloren
AndroidEs wird eine Weile warten, bevor die Verbindung unterbrochen wird. Der Server kann den Verbindungsverlust erkennen
2: Das Netzwerk ist instabil und WebSocket verliert die Verbindung nicht sofort, wenn die Netzwerkverbindung getrennt wird, und der Server kann es nicht erkennen. (Sie können auf der Serverseite einen Heartbeat-Mechanismus entwerfen, um regelmäßig Nachrichten an Benutzer im Verbindungspool zu senden, um zu erkennen, ob Benutzer Verbindungen aufrechterhalten)3: Andere usw. (plötzliches Herunterfahren, Ende der Anwendung in der Hintergrund)
Egal welcher, der Client kann zuerst denStatus
von ws ermitteln, wenn er eine Nachricht sendet (oder die Netzwerkverbindung wiederhergestellt wird oder der Bildschirm eingeschaltet wird). Befindet sich nicht im verbundenen Zustand, muss die Verbindung erneut hergestellt werden (einfach neu herunterladen) Serverseitiger TeilDie Serverseite verwendet Handler (Web
APIkann ebenfalls verwendet werden, hauptsächlich unter Verwendung der WebSocket-Klasse. Es gibt relativ detaillierte Kommentare im Code. Hier sind nur einige Probleme, die Aufmerksamkeit erfordern
1: Dictionary887d398c39979ad0022cb8187296860e> : Offline-Nachrichtenpool. Wenn A->B eine Nachricht sendet und B aus irgendeinem Grund derzeit nicht online ist (plötzliche Netzwerkunterbrechung/schwarzer Bildschirm usw.), wird die Nachricht zuerst gespeichert (2 Tage) und die Offline-Nachricht von B wird sofort gespeichert nachdem B verbunden ist. (2: MessageInfo: Offline-Entität. Zeichnen Sie die Zeit und den Inhalt der aktuellen Offline-Nachricht auf)<script> var ws; $().ready(function () { $('#conn').click(function () { ws = new WebSocket('ws://' + window.location.hostname + ':' + window.location.port + '/Handler1.ashx?user=' + $("#user").val()); $('#msg').append('<p>正在连接</p>'); ws.onopen = function () { $('#msg').append('<p>已经连接</p>'); } ws.onmessage = function (evt) { $('#msg').append('<p>' + evt.data + '</p>'); } ws.onerror = function (evt) { $('#msg').append('<p>' + JSON.stringify(evt) + '</p>'); } ws.onclose = function () { $('#msg').append('<p>已经关闭</p>'); } }); $('#close').click(function () { ws.close(); }); $('#send').click(function () { if (ws.readyState == WebSocket.OPEN) { ws.send($("#to").val() + "|" + $(&#39;#content&#39;).val()); } else { $('#tips').text('连接已经关闭'); } }); }); </script>
目的用户
Das obige ist der detaillierte Inhalt vonAusführliche Erläuterung von Beispielen für die Implementierung von serverseitigem WebSocket-Instant Messaging mithilfe von .NET. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!