我想确保我正在为SignalR库正确实现组功能。
我正在做的是允许用户为特定项目寻求帮助。启动项目的用户可以将其他用户添加到项目的协作表中。
Collaboration
(
UserID Uniqueidentifier,
ProjectID INT
)
如果任一用户进入协作模式,我想将该用户添加到组中,因此如果其他用户登录并进入协作模式,则会将其添加到同一组中。这些组的名称始终为ProjectID
。
因此,当用户登录并打开项目时,如果该项目位于协作表中,我将其添加到Groups.Add(Conext.ConnectionId,projID)
;
以下是我的问题:
当用户从客户端连接并且如果没有具有projID的组存在则调用OnConnected将导致错误或者信号器是否只是动态创建该组?
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());
}
对于上述所有方法,我是否需要调用每个覆盖方法的基本方法?
答案 0 :(得分:7)
Groups.Add()
时,SignalR将创建该群组
特定projID
的第一次。它不会抛出错误。OnDisconnected
。如果你
致电Stop()
有一个干净的断开连接和OnDisconnected
方法立即调用。如果您只是关闭浏览器,那么
通常会在延迟后调用OnDisconnected
方法
大约30秒(有一个配置开关来控制它)