Я пытаюсь получить чат-сервис в режиме реального времени для кросс-платформенных устройств для жизни. Проблема в том, что пространство имен System.Net.WebSockets
не позволяет мне отслеживать установленное соединение. Я мог бы взять sessionID текущего соединения, но как я могу сказать следующее действие await socket.SendAsync(buffer, WebSocketMessageType.Text, CancellationToken.None)
для конкретного клиента?Как отслеживать установленные соединения с помощью WebSockets
Если бы я мог использовать Microsoft.WebSockets
, я имел бы возможность создать WebSocketCollection()
и сделать что-то вроде client.Send(message)
, но я не могу отправить ArraySegment<byte[]>
через него. Я также думаю, что это больше предназначено для клиентов и веб-сайтов AJAX и этого.
теперь у меня есть следующий фрагмент кода:
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;
}
}
}
}
Как я могу продлить свой проект, сохранить сессии/подключение и вызов конкретного соединения пользователя для того, чтобы отправить ему сообщение?
Что заставило вас выбрать WebSockets более SignalR ? Просто запустите, есть учебник для [сопоставления пользователей с соединениями] (http://www.asp.net/signalr/overview/guide-to-the-api/mapping-users-to-connections) с SignalR – Jonesopolis
Я didn ' t знал, что SignalR поддерживается Android. WebSockets поддерживается изначально Windows и Xamarin, поэтому я хотел использовать это. Но, как я сейчас читаю, это было бы прекрасно! Спасибо, совет! – Flash1232
SignalR - это просто абстракция по нескольким различным типам общения. Обычно он использует WebSockets. И это потрясающе, IMO – Jonesopolis