3

SignalR (たまたま Knockoutjs で使用されている) を評価して、それを使用してクライアントに同時実行の問題を通知できるかどうかを確認しています。基本的に、ユーザー「a」がレコードを保存し、ユーザー「b、c、d、e、f、g」に通知されます。基本的に、すべてのクライアントに通知する例があります。だから私はほとんどそこにいると思います。

私はこのリンクに出会い、それが私が現在いる現在の道に私を導いてくれました。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);
    }
}
4

3 に答える 3

9

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);
    }
}
于 2012-01-11T16:12:26.860 に答える
3

クライアント側のメソッドへの呼び出しから呼び出し元を除外する場合は、次を使用できます。

Clients.Others.clientSideMethod();
于 2013-02-11T16:10:42.000 に答える
3

特定の人を除外できる Clients.AllExcept(...) もあります。

于 2013-02-13T15:58:23.613 に答える