我正在用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为空。
我不知道我做了什么。
感谢您的帮助
答案 0 :(得分:0)
不完全确定您在此类中尝试做什么,但通常您应该有一个单独的计时器类(而不是集线器类),然后使用ConnectionManager调用集线器类上的方法。