2013-02-17 3 views
3

Я хочу убедиться, что я правильно реализую функцию группы для библиотеки SignalR.Signalr Connect Disconnect and reconnect

Что я делаю, это позволяет пользователям запрашивать помощь для конкретного проекта. Пользователь, который запустил проект, может добавить других пользователей в таблицу совместной работы для своего проекта.

Collaboration 
(
    UserID Uniqueidentifier, 
    ProjectID INT 
) 

Если какой-либо пользователь переходит в режим совместной работы я хочу добавить пользователя в группу, так что если другой пользователь входит в систему и переходит в режим совместной работы они добавляют к той же группе. Группы всегда называются ProjectID.

Итак, когда пользователь входит в систему и открывает проекты, если этот проект находится в таблице сотрудничества, я добавляю их в Groups.Add(Conext.ConnectionId,projID);


Вот мои вопросы:

Когда пользователь подключается от клиента и OnConnected называется, если не существует ни одной группы с projíd будет это выдаст ошибку или будет signalr просто создать эту группу на лету ?

public override Task OnConnected(string projID) 
    { 
     return Groups.Add(this.Context.ConnectionId, projID); 
    } 

Когда клиент закрывает свой браузер, это когда вызывается OnDisconnected? И если этот пользователь по какой-то причине не входит в указанную группу projID, этот бросок и ошибка или будет сигнализировать об этом?

public override Task OnConnected(string projID) 
    { 
     return Groups.Add(this.Context.ConnectionId, projID); 
    } 

Для OnReconnected, это означает, что если пользователь выходит из системы, и делает что-то другое затем снова входит в том, что они автоматически добавляются обратно в группу, они где часть до подключения была потеряна?

public override Task OnReconnected(string projID) 
    { 
     return Clients.Group(projID).rejoined(Context.ConnectionId, 
      DateTime.Now.ToString()); 
    } 

Для всех вышеописанных методов необходимо вызвать базовый метод каждого метода с переопределением?

+1

Не обижайтесь, но почему бы вам просто не попробовать? 1. Создано, если оно не существует. 2. Да, когда сеанс завершается (событие закрытия браузера), вызываемый отключен. Он не будет бросать ошибку и будет обрабатываться, если этот пользователь не находится в этой группе. 3. Подключено, если клиент не отправил биение в какое-то время и внезапно снова подключился из-за утерянных сетевых подключений и т. Д.Этот код, который вы опубликовали, обрабатывает повторное добавление пользователя к этой группе с новым идентификатором соединения после повторного подключения. – f0x

+0

Почему вы не ответили с этим комментарием, и я мог бы отметить ваши комментарии в качестве ответа? –

ответ

7
  1. SignalR создаст группу при вызове Groups.Add() для впервые для конкретного projID. Это не приведет к ошибке.
  2. OnDisconnected вызывается всякий раз, когда соединение уходит. Если вы звоните Stop(), то есть чистый разъединение и метод OnDisconnected вызывается немедленно. Если вы просто закроете браузер, метод OnDisconnected обычно вызывается после задержки около 30 секунд (для этого есть переключатель конфигурации)
  3. Пользователи привязаны к определенным группам на основе их идентификаторов соединения. Если пользователь возвращается с другим идентификатором соединения, то вам нужно будет добавить его снова в соответствующую группу. Вы можете взглянуть на образец чата , снабженный SignalR, чтобы посмотреть, как можно обрабатывать такие случаи, как .
Смежные вопросы