Я впервые играю с SignalR. Я пытаюсь создать систему уведомлений, в которой сервер регулярно проверяет, есть ли что-то (база данных запросов) для широковещательной рассылки, и если она есть, то она передает ее всем клиентам.
Я наткнулся на этот пост в Stackoverflow и мне было интересно, действительно ли изменение кода для выполнения вызова БД с определенным интервалом действительно является правильным способом сделать это. Если нет, то есть ли лучший способ сделать это?
Я видел много вопросов, связанных с уведомлениями, но не содержащих ни одного кода. Отсюда и этот пост.
Это точный код, который я использую:
public class NotificationHub : Hub
{
public void Start()
{
Thread thread = new Thread(Notify);
thread.Start();
}
public void Notify()
{
List<CDCNotification> notifications = new List<CDCNotification>();
while (true)
{
notifications.Clear();
notifications.Add(new CDCNotification()
{
Server = "Server A", Application = "Some App",
Message = "This is a long ass message and amesaadfasd asdf message",
ImgURL = "../Content/Images/accept-icon.png"
});
Clients.shownotification(notifications);
Thread.Sleep(20000);
}
}
}
Я уже вижу странное поведение, когда уведомления приходят чаще, чем они должны были. Хотя я должен получать его каждые 20 секунд, я получаю его примерно через 4-5 секунд и получаю несколько сообщений.
Вот мой клиент:
var notifier = $.connection.notificationHub;
notifier.shownotification = function (data) {
$.each(data, function (i, sample) {
var output = Mustache.render("<img class='pull-left' src='{{ImgURL}}'/> <div><strong>{{Application}}</strong></div><em>{{Server}}</em> <p>{{Message}}</p>", sample);
$.sticky(output);
});
};
$.connection.hub.start(function () { notifier.start(); });