代码之家  ›  专栏  ›  技术社区  ›  Edwin ZAP

Blazor webassembly:同步客户端和服务器时间

  •  0
  • Edwin ZAP  · 技术社区  · 3 年前

    我创建了一个Blazor WebAssembly应用程序。我的项目包含一个API(asp-net-core)和BlazorWA应用程序。 该项目计算团队运行一条赛道所需的时间。 我在API中确保启动时间(服务器时间),并通过执行currentTime(客户端时间)-startTime(服务器时间。 我在家里测试了所有东西,没有任何问题,但在其他设备上,客户端时间与服务器时间不同步,所以计时器在50秒开始计时。

    什么是最好、最简单的解决方案?(我不需要完美的时间)

    谢谢

    0 回复  |  直到 3 年前
        1
  •  0
  •   keithwill    3 年前

    如果客户端使用初始启动时间在屏幕上显示计时器,那么停止时间也需要准确。为什么不在客户端打开时,让客户端每秒轮询一次更新的计时器状态?客户端每秒从服务器获取开始时间、此后经过的时间和结束时间(如果存在)。

    或者,如果你想从服务器而不是从客户端轮询推送停止,你可以对SignalR做同样的事情(这将节省一些带宽,并以页面的复杂性为代价使计时器更准确)。

        2
  •  0
  •   Umair Tahir    3 年前

    您可以简单地使用 .ToUniversalTime() DateTime 对象您必须从API发送转换后的日期,还需要转换客户端的日期。然后,您将编写如下代码:

    var elapsedTime = currentTime.ToUniversalTime() - startTime;
    

    startTime将是来自API的通用时间。

    否则,您也可以发送服务器的 Timezone 使用API响应,并根据该响应转换客户端的时间。

    您也可以使用此扩展方法:

    public static DateTime ToTimezone(this DateTime dateTime, string timezone) //timezone="Hawaiian Standard Time"
    {
        TimeZoneInfo timezoneInfo = TimeZoneInfo.FindSystemTimeZoneById(timezone);
        return TimeZoneInfo.ConvertTime(dateTime, timezoneInfo, TimeZoneInfo.Local);
    }