我正在评估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(...)允许排除某些人。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top