SignalR для отслеживания онлайн-пользователей и чата - PullRequest
4 голосов
/ 11 марта 2012

Мы работаем над приложением для социальной сети и собираемся реализовать несколько новых функций. 1. Отслеживание онлайн-пользователей 2. Чат (индивидуальный чат и групповой чат позже)

Я заглянул в SingalR, и он кажется многообещающим. Мы используем ASP.NET MVC 3 и думаем об использовании хабов. Мой вопрос для начала: лучше ли будет использовать SignalR вместо простого опроса чата? Что будет лучше в отношении масштабируемости? Я видел другие вопросы по SO, но не смог выяснить, какой из них лучше с точки зрения масштабируемости.

Второй вопрос: если мы используем SignalR, можем ли мы использовать его для отслеживания онлайн-пользователей. Мы можем вызывать функцию на стороне сервера от каждого клиента через регулярные промежутки времени, чтобы сказать «Я онлайн», и в методе концентратора мы можем просто установить бит isOnline в БД. Как только клиент отключен, мы можем сбросить бит. Будет ли это работать или просто лучше опрос? Как сделать пользователя автономным, если мы используем простой опрос?

Ответы [ 2 ]

5 голосов
/ 11 марта 2012

Я использую SignalR как своего рода архитектуру чата.Прекрасно работает при настройке нашего единого сервера IIS.Для проверки масштабируемости: Sclaing-out-SignalR

Если вы используете концентраторы, вы можете решить проблему «Я в сети», запросив подключенных клиентов, например this

var clients = Hub.GetClients<Type of your hub here>();

и запросите идентификатор пользователя у каждого клиента.В случае потери какого-либо соединения вы должны найти в сети пользователей БД, которые больше не являются клиентами хаба.

ИЛИ

Другой подход заключается вустановить пользователя онлайн как первое сообщение от пользователя к концентратору.«Привет, я там».И используйте это решение

public class MyHub : Hub, IDisconnect
{
    public Task Disconnect()
    {
        // Query the database to find the user by it's client id.
        var user = db.Users.Where(u => u.ConnectionId == Context.ConnectionId);
        return Clients.disconnected(user.Name);
    }
}

Для обработки события отключения.

Надеюсь, я мог бы дать вам несколько идей.

1 голос
/ 17 февраля 2014

SignalR лучше, чем опрос, из-за сетевого трафика, связанного с соединениями БД.Также подумайте о том, какую версию signalR вы будете использовать в своем проекте MVC, поскольку последняя версия signalR поддерживает только .net 4.5.

Что касается количества соединений, то это зависит от того, сколько у вас памятии сколько соединений вы настроили в IIS.Вы можете легко справиться с 1000+ на приличной установке.

Как и в случае с ответом Тома, вы можете перехватывать события в концентраторах или на более низких интерфейсах signalR, чтобы получать значения, отключать и подключать события.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...