SignalR - 从最新的集线器上下文从服务器发送到客户端

SignalR - Sending from server-to-client from latest Hub context

我有一个简单的演示,只有 1 个客户端和服务器。我可以来回发送消息,非常琐碎的东西。

服务器集线器有一个计时器,每 1000 毫秒向客户端发送一条消息。现在我有一个按钮,单击该按钮会向服务器发送一条消息(通过 signalR)。

问题: 单击按钮(并将消息发送到服务器)时,每次都会实例化集线器(我阅读了 SignalR 生命周期 here)。 当然,当 Hub 被实例化时,Timer 也会被实例化。所以我看到的副作用(即错误)是消息从多个集线器实例发送到客户端。

我想要什么: 我希望客户端接收消息(来自集线器上 运行 的计时器),但只有来自单个集线器的一组消息(最新的集线器实例?)。我不想要 simultaneous/multiple 从实例化的每个集线器生成的消息。

但也许我在这里的设计中犯了严重的错误。

您不应在集线器实例中设置计时器,因为它们会在每次请求时重新创建。 只需创建一个 Singleton class 来处理计时器和操作。然后从您的集线器实例访问该单例。

单例实例将在应用程序的整个生命周期中持续存在,因此您将只创建一个计时器。 为了避免并发问题,你的单例应该是 Lazy