题
我正在评估SignalR(恰好与QuintOutJ一起使用),以查看我们是否可以使用它来通知客户并发问题。基本上是用户“ a”保存了记录和用户“ b,c,d,e,f,g”。我基本上有一个示例,可以通知所有客户。所以我想我快到了。
我遇到了这个 关联 这使我走上了我目前的道路。我也一直在看文档 github.
基本上,我想将单个客户排除在 Clients.method()
称呼。我看不到循环浏览客户端并检查客户端的方法。我唯一能看到的其他方法是考虑使用这些组来跟踪它,但这似乎有些麻烦,但是我也有问题。
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>
班级 :
public class Test : Hub
{
public void Start()
{
Caller.guid = Guid.NewGuid();
}
public void TestMethod()
{
Clients.show("test", Caller.guid);
}
}
其他提示
如果要将呼叫者从调用到客户端方法中排除,则可以使用:
Clients.Others.clientSideMethod();
也有客户。Allexcept(...)允许排除某些人。
不隶属于 StackOverflow