2013-05-14 57 views
1

我正在使用SignalR構建原型。我需要將消息廣播給多個客戶端,但是有一些邏輯可以確定哪些客戶端會得到哪些消息足夠複雜以排除使用組。相反,我基本上檢查每個連接的客戶端 - 如果它們適用,它們將被添加到列表<>。然後我用發送消息:SignalR - 發送給多個客戶端(不是羣組)

var clients = DetermineClients(msg); 
foreach (var client in clients) 
    client.Send(msg); 

當然,如果我能夠使用網上論壇,我所能做的...:

var group = DetermineGroup(msg); 
group.Send(msg); 

...自組的「發送」方法似乎基本上做同樣的事情 - 枚舉組中的客戶端,並對這些客戶端調用「發送」。這是做到這一點的「正確」方式嗎?或者有什麼方法可以即時創建臨時組?一個團體或單一客戶的「動態」類型使我很難確定自己是否做得對。如果在場景後面發生了一些優化向多個客戶端廣播的魔術,我顯然寧願使用它!

任何意見,將不勝感激。讓我知道你是否需要更多信息。

回答

2

如果你只是想發送相同的消息給了一些基於一個複雜的標準不同客戶的最好的辦法是將有一個包含所有客戶端的一組,然後查詢,找出哪些客戶不要符合您的標準。與連接ID列表不符合您的標準,你可以做:

Clients.Group("myGroupThatHasAllMyClients",myExcludedConnectionIds).bar(); 
+0

這是什麼更好(更有效率),我現有的方法循環客戶端?你的建議似乎有點違反直覺;我只會過濾一次,要求SignalR再次過濾。感謝您的回覆。 – Barguast 2013-05-14 20:20:02

+0

它效率更高。通過循環客戶端,你本質上是向每個客戶端發送一個不同的(即使它實際上是相同的)消息。然而,按照我的方法,您向所有客戶發送1條消息,即相同的消息。 – 2013-05-14 21:22:50

+0

我很懷疑。儘管如此,它對我來說似乎有些倒退。在我的情況下,我懷疑我會將每條消息發送給一小部分客戶。將這個發送給A,B和C'而不是'發送給每個人,但是D,E,F,G,H,I,J ... Z'會更有意義。這是我目前唯一的選擇(無需修改源代碼)?再次感謝您的回覆 - 非常有幫助。 – Barguast 2013-05-15 09:17:13