【问题标题】:Timing multiple client events from Blazor server as precisely as possible尽可能精确地从 Blazor 服务器计时多个客户端事件
【发布时间】:2021-09-01 05:45:23
【问题描述】:

我的想法是使用单例服务事件来协调多个用户之间的时间。具体来说,我会同时向玩家提出一个问答游戏问题。

我将使用什么方法将 Timer 事件(3、2、1、go...)同时广播给多个用户?

--编辑-- 我正在考虑显示图像,这可能需要一些时间才能加载。 Blazor 是否会在设置标记时触发“OnAfterRender”,或者在客户端实际加载资产时触发?

【问题讨论】:

  • 你只需要一些推送机制。预期的差异将在毫秒范围内,几乎不是需要解决的问题。并尽量避免单身。
  • 好的,这是一个不错的开始。我会说大约 0.1-0.25 秒以下的任何差异都是可以接受的公差。让我稍微改进/改进我的问题,看看你的想法。

标签: timer blazor blazor-server-side


【解决方案1】:

我不会为此使用单例。可以这样做,但不推荐。您可以使用eventing mechanism 来完成此操作。在调用者可以订阅的单例中有一个事件,然后当某个事件发生时,处理程序被调用。

不过,这听起来像是使用 SignalR 的绝佳用例。我做同样的事情来将信息从一台设备推送到另一台设备,而不必自己做繁重的工作。您可以使用群组功能并将一个或多个用户添加到群组中。然后,您只需向该组发送一条消息,所有用户都会收到它。 SignalR 非常容易设置,您可以直接在 Asp.Net Core 应用程序中运行它。不需要任何外部的东西。

【讨论】:

  • 好的,在 Henk、enet(在另一个线程中)和您的回答之间,看起来 SignalR 将成为门票。正如你所描述的那样,我打算使用单例,但我现在不这样做了。
  • 是的,更不用说如果你想使用单例,你必须处理线程安全和其他事情。
  • 好的,我已经开始查找 SignalR,但我很困惑。我找到的示例都是 WASM 项目,但我使用的是 Blazor 服务器,而不是 Web Assembly。 SignalR 实际上为我做了什么?
  • 这是来自 Microsoft 的 sample,介绍了如何构建简单的 Blazor Server 聊天应用程序。 Signalr 基本上为您处理通信。
  • 在该示例中,您执行await _hubConnection.SendAsync("Broadcast", _username, message);。由于BlazorChatSampleHub 中的await Clients.All.SendAsync("Broadcast", username, message);,这将向所有听众发送一条消息。其他 Blazor 会话将收到该消息,因为它们都通过 _hubConnection.On<string, string>("Broadcast", BroadcastMessage); 订阅它。这确实意味着发送消息的用户也会收到它,但您可以在集线器中发送时只使用Client.Others 而不是Client.All,这样它只会广播到“其他”客户端。
猜你喜欢
  • 2019-11-20
  • 2015-11-09
  • 2023-03-22
  • 1970-01-01
  • 2020-12-09
  • 1970-01-01
  • 2023-03-20
  • 1970-01-01
  • 2012-04-01
相关资源
最近更新 更多