我刚刚开始学习signalR,我正在尝试实现一个搜索功能。
我该如何定期更新用户的搜索结果呢。我最初的想法是通过IRegisteredObject运行一个定时作业,以触发来自客户端的检查,搜索参数如下:
public class BackgroundTimer : IRegisteredObject
{
private Timer taskTimer;
private IHubContext hub;
public BackgroundTimer()
{
HostingEnvironment.RegisterObject(this);
hub = GlobalHost.ConnectionManager.GetHubContext<SearchHub>();
taskTimer = new Timer(OnTimerElapsed, null, TimeSpan.FromSeconds(1), TimeSpan.FromSeconds(5));
}
private void OnTimerElapsed(object sender)
{
hub.Clients.All.checkForUpdates();
}
}
public class SearchHub : Hub
{
public void Search(string searchText)
{
string jsonResult = string.Empty;
//TODO save result to jsonResult
Clients.Caller.broadcastMessage(jsonResult);
}
}
然而,我忍不住认为有更有效的方法来实现这一点。任何建议请
使用这些代码,您只是在做客户端可以做的事情,即每秒轮询服务器。发布一条关于更改搜索结果的所有操作的消息,然后执行该操作。或者使用SqlDependency。