質問
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);
}
}
解決
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