我有一个接收来自客户端的请求的集线器,如下所示:
[HubName("Check")]
public class Check : Hub
{
private long _sessionId;
private string _sortType;
private int _tableCount;
private Timer _timer;
public void Car(long sessionId, string sortType, int tableCount)
{
_sessionId = sessionId;
_sortType = sortType;
_tableCount = tableCount;
StartCarTimer();
}
public void StartCarTimer()
{
_timer = new Timer(3000);
_timer.Elapsed += CarTimerElapsed;
_timer.Start();
}
void CarTimerElapsed(object sender, ElapsedEventArgs e)
{
int countCars = CountCars();
if (countCarPrices > _tableCount)
{
_tableCount = countCarPrices;
Clients.All.car(GetCarTable());
}
}
private int GetCars()
{
CarPrices carPrices = new CarPriceRepository().FindCarPricesById(_sessionId);
return carPrices;
}
}
我简化了一点但基本上我每隔3秒轮询一次数据库以检查更改,这真的感觉像是可怕的设计。我一直在寻找如何在没有任何结果的情况下解决这个问题。
朋友建议的一种方法是从更新数据库的服务通知服务器端的signalR集线器,但我不知道该怎么做。
有人可以指出我正确的方向吗?
答案 0 :(得分:-1)
signalr在至少2个客户之间工作
客户端A,连接并等待消息,
客户端B,做某事(开始向服务器发出请求),服务器通知客户端A重新建立消息
GlobalHost.ConnectionManager.GetHubContext<T>().Clients
您可以使用此功能将所有客户送到任何地方 客户端与集线器中的客户端属性相同 和
Clients.Group("groupName").method(param)
像这样的一些代码,可以注意到你想要注意的客户端,方法是一个js方法,它通过signalr自动生成与你的hub方法相同的名字(首字母小写)