2012-01-10 39 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

相關問題