gpt4 book ai didi

c# - SignalR 在集线器方法中等待很长时间

转载 作者:太空宇宙 更新时间:2023-11-03 12:56:45 26 4
gpt4 key购买 nike

嗨,

我的服务器(azure webroles)上有一个集线器,方法如下:

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 op 指出“集线器感觉不是执行此操作的正确位置。集线器应该像 MVC/Web Api Controller 一样对待?所以请求进来,集线器处理它,请求完成。故事结束.”。后台工作人员可能是一个更好的主意。

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

但是,对我来说更简单且在某些情况下也更干净的方法是在 hub 方法中等待更长的时间,但我不确定这是否会带来一些问题。

感谢您的帮助!

最佳答案

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

更好的方法是传递需要该信息的客户端的 ConnectionId 并使用:

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

获取中心上下文并在需要/想要时回调客户端

关于c# - SignalR 在集线器方法中等待很长时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33617856/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com