Есть ли способ исключить клиента из клиентов. Метод вызов в SignalR?
-
26-10-2019 - |
Вопрос
Я оцениваю SignalR (который используется с nockoutjs), чтобы увидеть, сможем ли мы использовать его для уведомления клиентов о проблемах параллелистики. В основном пользователь «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();
Есть также клиенты. Allexpt (...), который позволяет исключать определенных людей.