SignalR创建计时器

时间:2014-01-14 20:40:46

标签: signalr-hub

我正在用SignalR开发一些代码。

我想创建一个计时器,这个计时器厚一个函数,这个函数通过userName从数据库读取数据,获取新闻属于调用者。

问题是如果我在再次创建的每个连接计时器上创建了Hub类中的Timer,那么这是无用的。

如果我创建这样的计时器

   public class SignalRTime
{
    private readonly Timer _timer;
    private int _count = 0;

    private readonly static Lazy<SignalRTime> _instance = new Lazy<SignalRTime>(() =>
        new SignalRTime(GlobalHost.ConnectionManager.GetHubContext<TimerHub>().Clients));

    private SignalRTime(IHubConnectionContext clients )
    {
        Clients = clients;
        _timer = new Timer(UpdateTime, null, 0, 6000);
    }


    private void UpdateTime(object state)
    {
        lock(CurrentTime)
        {
            _count++;
        }
        Clients.All.broadcastTime(CurrentTime);
    }

    public static SignalRTime Instance
    {
        get
        {
            return _instance.Value;
        }
    }

    private IHubConnectionContext Clients
    {
        get;
        set;
    }

    public string CurrentTime
    {
        get
        {
            return _count.ToString();
        }
    }

}

在这种情况下,我无法读取当前用户名,因为尽管我已登录,但HttpContext.Current为空。

我不知道我做了什么。

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

不完全确定您在此类中尝试做什么,但通常您应该有一个单独的计时器类(而不是集线器类),然后使用ConnectionManager调用集线器类上的方法。