2013-02-17 143 views
3

我想确保我正确地为SignalR库实现组功能。Signalr Connect断开并重新连接

我正在做的是让用户为特定项目寻求帮助。启动该项目的用户可以将其他用户添加到他们项目的协作表中。

Collaboration 
(
    UserID Uniqueidentifier, 
    ProjectID INT 
) 

如果任一用户进入合作模式,我想给该用户,所以如果另一个用户登录并进入它们加入到同组的合作模式添加到组。这些组总是被命名为ProjectID

所以,当用户登录并打开项目,如果该项目在协作表中,我将它们添加到Groups.Add(Conext.ConnectionId,projID);


这里是我的问题:

当用户从客户端连接,如果与PROJID没有组存在将在抛出错误或将signalr只是动态创建该组的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()); 
    } 

对于上述所有方法,我是否需要调用每个覆盖方法的基方法?当你调用Groups.Add()的 首次为一个特定的projID

+1

没有冒犯队友,但你为什么不试试呢? 1.如果不存在则创建。 2.会话结束时会调用断开连接(浏览器关闭事件);它不会抛出错误,并且如果该用户不在该组中,将被处理。 3.重新连接是因为客户没有在一段时间内发送心跳,并且由于网络连接丢失等突然重新连接。您发布的代码在重新连接后处理用户重新添加到该组的新连接ID。 – f0x 2013-02-17 19:43:12

+0

为什么你只是回答这个评论,我可以标记你的评论作为答案? – 2013-02-17 19:48:58

回答

7
  1. SignalR将创建组。它不会抛出错误。
  2. OnDisconnected在连接消失时被调用。如果你 请致电Stop()有一个干净的断开连接,并立即调用方法。如果您刚刚关闭浏览器,通常会在延迟 约30秒后(有一个配置开关来控制此方法)调用方法
  3. 用户根据其连接标识绑定到特定组。如果 用户回来了一个不同的连接ID,您将不得不 再次将其添加到相应的组。您可以查看SignalR提供的 聊天示例,了解如何处理此类案例可以处理的内容。
相关问题