Wie Sie mit WebSockets die Verbindung nachverfolgen können
Ich versuche, einen Echtzeit-Chat-Dienst für plattformübergreifende Geräte zum Leben zu erwecken. Das Problem ist, dassSystem.Net.WebSockets
it @ Namespace kann ich eine hergestellte Verbindung nicht direkt nachverfolgen. Ich könnte eine sessionID der aktuellen Verbindung nehmen, aber wie kann ich sagen, die folgende Aktion ausführenawait socket.SendAsync(buffer, WebSocketMessageType.Text, CancellationToken.None)
für einen bestimmten Kunden?
Wenn ich könnteMicrosoft.WebSockets
, Ich hätte die Möglichkeit ein @ anzulegWebSocketCollection()
und mach so etwas wieclient.Send(message)
, aber ich kann kein @ sendArraySegment<byte[]>
durch. Ich denke auch, dass dies eher für AJAX-Kunden und Websites gedacht ist.
Ich habe jetzt den folgenden Codeausschnitt:
public class WSHandler : IHttpHandler
{
event NewConnectionEventHandler NewConnection;
public void ProcessRequest(HttpContext context)
{
if (context.IsWebSocketRequest)
{
context.AcceptWebSocketRequest(ProcessWSChat);
}
}
public bool IsReusable { get { return false; } }
private async Task ProcessWSChat(AspNetWebSocketContext context)
{
WebSocket socket = context.WebSocket;
int myHash = socket.GetHashCode();
while (true)
{
ArraySegment<byte> buffer = new ArraySegment<byte>(new byte[1024]);
WebSocketReceiveResult result = await socket.ReceiveAsync(
buffer, CancellationToken.None);
if (socket.State == WebSocketState.Open)
{
string userMessage = Encoding.ASCII.GetString(
buffer.Array, 0, result.Count);
userMessage = "You sent: " + userMessage + " at " +
DateTime.Now.ToLongTimeString() + " from ip " +
context.UserHostAddress.ToString();
buffer = new ArraySegment<byte>(
Encoding.ASCII.GetBytes(userMessage));
await socket.SendAsync(
buffer, WebSocketMessageType.Text, true, CancellationToken.None);
}
else
{
break;
}
}
}
}
Wie kann ich mein Projekt erweitern, die Sitzungen / Verbindungen speichern und eine bestimmte Benutzerverbindung aufrufen, um ihr eine Nachricht zu senden?