SignalR在hub方法中等待很长时间

时间:2015-11-09 20:40:16

标签: c# asp.net azure signalr signalr-hub

您好,

我的服务器(azure webroles)上有一个Hub,使用以下方法:

public async Task<bool> Listen()
{
    var userid = ...;
    var observer = new BlackBoxObserver(userid){
        OnObserver = async (x) => { await Clients.Caller.NewMessage(x);}
    };
    await Task.Delay(TimeSpan.FromMinutes(5));
    await observer.Stop();
    return true;
}

BlackBoxObserver与SignalR无关,并在特定事件上调用OnObserver。在此示例中,观察者在5分钟后停止并且hub方法返回。

我的问题是,这是否是关于使用集线器的有效方法?对于集线器呼叫,您是否需要考虑超时?

在这个StackOverflow Question操作状态中“集线器感觉不适合这样做。集线器应该被视为MVC / Web Api控制器吗?所以请求进来,集线器处理它,请求完成。故事结束。“。而后台工作者可能是个更好的主意。

所以我想我可以让客户端在调用hub方法时加入Sessiongroup,然后从后台线程调用观察者并按照here (asp.net/...)的描述调用该组。 这会是一个更好的方法吗?

然而,对于我来说,更简单,在某些情况下也更清洁的方式是等待更长时间的hub方法,但我不确定这是否会带来一些问题。

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

我认为这些超时是可配置的,但您的问题似乎更具概念性。 显示的逻辑让我想起了一个longpolling结构,客户端向服务器发送请求。然后服务器等待,直到有新信息可用,然后返回响应给客户端。这正是SignalR试图从你身上抽象出来的事情。

更好的方法是传递需要信息和使用的客户端的connectionId:

 var hub =GlobalHost.ConnectionManager.GetHubContext("yourhubname");
 var client = hub.Clients.Client(connectionid);

获取集线器上下文并在需要/想要

时调用客户端