SignalR是否正确用于轮询服务器以进行更新?

时间:2014-12-12 15:01:46

标签: javascript c# .net model-view-controller signalr

我的页面上有一个通知按钮,表示当前正在等待用户的通知数量。

我认为我可以正确使用SignalR,因为我希望打开一个连接,定期检查此通知计数的更新,然后更新DOM。

我希望我可以使用SignalR执行以下操作,但我不知道如何定期检查更改。

我认为我使用以下代码是正确的:

SignalR Hub

[Authorize]
public class NotificationHub : Hub
{
    private IQuizEntities DbContext;

    public NotificationHub(IQuizEntities dbContext)
    {
        this.DbContext = dbContext;
    }

    public void GetNotificationCount()
    {

        int userId = Context.User.Identity.GetUserId<int>();

        // Get the notification count for the logged in user
        int notificationCount = (from notification in this.DbContext.EntitySet<Notification>()
                                where notification.UserId == userId
                                select notification).Count();

        // If there are any notificatoins, inform the client
        if (notificationCount > 0)
        {
            Clients.Caller.updateNotificationCount(notificationCount);
        }

    }
}

使用Javascript:

function NotificationHeartbeat() {

    var notificationHubProxy = $.connection.notificationHub;

    notificationHubProxy.client.updateNotificationCount = function (notificationCount) {

        $('span#notification_count').html(notificationCount);

        // Change colour of button
        if (notificationCount < 1) {
            $('#notification_button').removeClass('notification_button_active');
        } else {
            $('#notification_button').addClass('notification_button_active');
        }
    };

    // Start the connection
    $.connection.hub.start().done(function () {

        // Do something

    });
}

但遗憾的是它永远不会更新DOM ...我认为SignalR可以用来定期对服务器进行长时间轮询?

我注意到我的用例和我见过的另一个用例之间的区别在于,当一个请求来自另一个用户做某事时,SignalR会发出信号。我不想这样做,我只是希望我的服务器定期检查通知的数量,就像任何其他休息服务一样。也许我应该在ajax中使用长轮询。

0 个答案:

没有答案