首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在多个移动设备上同步移动设备与服务器同时运行命令

在多个移动设备上同步移动设备与服务器同时运行命令
EN

Stack Overflow用户
提问于 2021-02-04 07:48:02
回答 1查看 318关注 0票数 1

我正在建立一个实时竞争的应用程序移动设备的健身设备(超过BLE)。由于延迟,移动设备可以在不同的时间从服务器接收命令。我试图实现的东西,所有的设备是“同步”与服务器,并执行“开始竞赛”命令在同一时间。这样,不一定相邻的用户将获得尽可能多的实时体验,并在接近准确的时刻开始竞争。此时,我使用WebSockets向我的移动应用程序发布命令,但假设设备A将在20 my内收到命令,设备B将在150 my内收到命令。虽然这只是一眨眼的功夫,但在健身器材上却是非常引人注目的。如何在架构上创建一个应用程序,例如,在1 PM UTC上在所有设备上执行命令?这里的问题是移动设备可能有不同的时间,所以我希望我的移动应用程序与服务器时间同步,如果我说在1 PM UTC服务器时间执行命令,我知道所有移动设备都会实现这一点。

目前的架构:

调度或手动调用命令-> SignalR通知所有连接设备->设备执行“开始”

可能的架构:

调度或手动调用命令,让设备知道运行命令-> SignalR (WebSockets或其他一些技术)的确切时间,通知连接的设备将移动应用程序时间与服务器同步,并且命令执行时间->命令在许多设备上几乎实时执行。

如何同步时间?使用NTP?对于这个场景,您认为最好的架构是什么?

我见过许多类似于此的应用程序,但我正在尝试理解这种架构。我认为技术是不相关的,我不能控制BLE在健身设备上的执行时间,但它们是快速的。如果它能帮助我使用SignalR for WebSockets (.NET Core 3.x in C#),那么移动应用程序就会在Flutter/Dart上运行。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-16 15:44:00

要同步时间,可以使用toUtc法

返回UTC时区中的此DateTime值。

然后在所有设备上完全同时开始使用计时

创建一个新的计时器。回调函数在给定持续时间后调用。

下面是工作实例:

代码语言:javascript
复制
import 'dart:core';

DateTime startTime = DateTime.utc(2021, 2, 16, 15, 0); // you feed the startTime from your server using websocket.

void checkForStart(Timer timer) {
  print(startTime);
  timer?.cancel();
  while (true) {
    print('Run Forest!');
    // [... do your app things]
  }
}

...

 initState() {
    super.initState();

    var current = DateTime.now().toUtc(); // this is what you want
    Duration difference = startTime.difference(current);
    timer = Timer(Duration(microseconds: difference.inMicroseconds), () => checkForStart(timer));
[...]

dispose() {
    timer?.cancel();
    super.dispose();
  }

产出:

代码语言:javascript
复制
I/flutter ( 5819): 2021-02-16 15:00:00.000Z
I/flutter ( 5819): Run Forest!
I/chatty  ( 5819): uid=10154() 1.ui identical 65535 lines
I/flutter ( 5819): Run Forest!

这段代码将保证应用程序为每个人同时启动,因为它将执行一个检查与计时器,并在本地设备上启动它,同时,您已经提供给设备的startTime (注意:这是前台版本,意味着每个人都应该打开应用程序)

我没有详细说明websocket部分,因为我假设您在实现它时没有问题,如果没有,您可以查看这个储存库或不同的文档、教程和stackOverflow答案。如果有帮助请告诉我。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66041326

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档