2012-01-10 54 views
3

我正在评估SignalR(恰好与Knockoutjs一起使用)以查看我们是否可以使用它来通知客户端并发性问题。基本上用户“a”保存一条记录并通知用户“b,c,d,e,f,g”。我基本上有一个通知所有客户的例子。所以我觉得我快到了。有没有一种方法可以从SignalR中的Clients.method调用中排除客户端?

我遇到了这个link,它引导我走在当前的道路上。我也一直在查看有关Github的文档。

基本上我想从Clients.method()呼叫中排除单个客户端。我没有看到通过客户端循环的方式并检查ClientId。我能看到的唯一能做到的就是或许看看使用这些小组来跟踪它,但这看起来有点麻烦,但我也遇到了问题。

public class TicketHub : Hub 
{ 
    static int TotalTickets = 10; 

    public void GetTicketCount() 
    { 
     AddToGroup("ticketClients"); 
     Clients.setTicketCount(TotalTickets); 
    } 

    public void BuyTicket() 
    { 
     if (TotalTickets > 0) 
      TotalTickets -= 1; 

     RemoveFromGroup("ticketClients"); 

     // This will call the method ONLY on the calling client 
     // Caller.updateTicketCountWithNotification(TotalTickets); 

     // This will call the method on ALL clients in the group 
     Clients["ticketClients"].updateTicketCountNotify(TotalTickets); 

     AddToGroup("ticketClients"); 

     Caller.updateTicketCountDontNotify(TotalTickets); 
    } 
} 
+0

你能说清楚你想干什么吗?你想显示用户对特定用户所做的更改吗? – sinanakyazici 2012-01-11 09:27:33

+0

@sinanakyazici重申,我需要通知所有客户,除了呼叫者。似乎没有办法通过客户端循环来排除特定的客户端。您可以调用特定的一个或全部。 – Etch 2012-01-11 14:15:07

回答

8

javascript代码:

<script type="text/javascript"> 
    $(document).ready(function() { 
     var test = $.connection.test; 
     $("#btnTest").click(function() { 
      test.testMethod(); 
     }); 
     test.show = function (text, guid) { 
      if (guid != test.guid) //notify all clients except the caller 
       alert(text); 
     }; 
     $.connection.hub.start(function() { test.start(); }); 
    }); 
</script> 

类:

public class Test : Hub 
{ 
    public void Start() 
    { 
     Caller.guid = Guid.NewGuid(); 
    } 

    public void TestMethod() 
    { 
     Clients.show("test", Caller.guid); 
    } 
} 
+0

非常好。我没有考虑在JavaScript中管理它。我也希望能够使用客户端ID来管理我自己的标识符。但是,这是有效的。谢谢! – Etch 2012-01-11 16:25:35

+0

解决了我的问题..谢谢sinan – bhargav 2012-02-20 10:41:54

+3

只是为了记录你也可以使用'$ .connection.hub.id'而不是你自己的guid来做这样的小事。 – samandmoore 2012-07-13 16:49:20

3

如果你想排除从调用客户端的方法调用者可以使用:

Clients.Others.clientSideMethod(); 
+0

这是假设用户a打电话给集线器 – JBeagle 2013-02-11 16:11:04

3

还有Clients.AllExcept(...)tha吨允许排除某些人。

+0

是的,我现在就用这个​​。但在这个问题的时候版本没有这个电话。 – Etch 2013-02-13 19:44:20

相关问题