【问题标题】:SignalR - Sending from server-to-client from latest Hub contextSignalR - 从最新的 Hub 上下文从服务器发送到客户端
【发布时间】:2016-11-09 09:07:36
【问题描述】:

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

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

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

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

但也许我在这里的设计中做了一些严重错误的事情。

【问题讨论】:

    标签: asp.net signalr


    【解决方案1】:

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

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

    【讨论】:

    • 请注意,这与 Core 不同:“在 ASP.NET Core SignalR 中,连接模型已被简化。直接连接到单个集线器,而不是使用单个连接来共享访问到多个枢纽。” docs.microsoft.com/en-us/aspnet/core/signalr/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-02
    • 1970-01-01
    相关资源
    最近更新 更多