Signalr 有没有办法从信号器中的Clients.method调用中排除客户端?
我正在评估signar(它恰好与Knockoutjs一起使用),看看我们是否可以使用它来通知客户端并发性问题。基本上,用户“a”保存记录,并通知用户“b、c、d、e、f、g”。我基本上有一个通知所有客户的示例。所以我想我就快到了 我遇到了这一点,它引导我走上当前的道路。我还一直在看有关的文档 基本上,我想从Signalr 有没有办法从信号器中的Clients.method调用中排除客户端?,signalr,Signalr,我正在评估signar(它恰好与Knockoutjs一起使用),看看我们是否可以使用它来通知客户端并发性问题。基本上,用户“a”保存记录,并通知用户“b、c、d、e、f、g”。我基本上有一个通知所有客户的示例。所以我想我就快到了 我遇到了这一点,它引导我走上当前的道路。我还一直在看有关的文档 基本上,我想从Clients.method()调用中排除单个客户端。我看不出有什么方法可以循环浏览客户机并检查客户ID。我能看到的实现这一点的唯一其他方法是,或许可以考虑使用小组来跟踪它,但这似乎有点麻烦,
Clients.method()
调用中排除单个客户端。我看不出有什么方法可以循环浏览客户机并检查客户ID。我能看到的实现这一点的唯一其他方法是,或许可以考虑使用小组来跟踪它,但这似乎有点麻烦,但我也遇到了一些问题
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);
}
}
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>
如果要从对客户端方法的调用中排除调用方,可以使用:
Clients.Others.clientSideMethod();
还有Clients.AllExcept(…)允许排除某些人。您能清楚地说明您想做什么吗?您想向特定用户显示用户所做的更改吗?@sinanakyazici重申一下,我需要通知除调用者之外的所有客户端。似乎没有一种方法可以循环通过客户端来排除某个特定的客户端。你可以叫一个特定的,也可以叫全部。太好了。我没有想过用javascript来管理它。我还希望使用客户端id,而不是管理自己的标识符。然而,这是可行的。谢谢解决了我的问题..感谢sinanjust提供的记录对于这样的琐事,您也可以使用
$.connection.hub.id
而不是您自己的guid。此解决方案唯一的缺点是,如果发送给所有客户端的消息相当大,则将其转储到客户端会浪费带宽。在我的使用中,移动开发,这可能是一个巨大的损失!这假设用户a调用了HubYep,我现在使用它。但在提出这个问题时,这个版本并没有这样的号召力。
Clients.Others.clientSideMethod();