【问题标题】:What is the best way to send real-time data between apps without latency在应用程序之间无延迟地发送实时数据的最佳方式是什么
【发布时间】:2018-07-24 19:56:12
【问题描述】:

在 Android 中,我有一个后台应用程序,它正在收集一些传感数据,对其进行处理并将其作为意图发送到在前台运行的 Unity 应用程序,该应用程序使用它来更新对象的转换。正如您可能猜到的,我需要每秒执行 60 次。使用意图作为应用程序之间的通信方式确实会增加 Unity 转换的延迟和迟缓。有没有更好的方法在两个 Android 应用程序之间进行实时通信?任何指针将不胜感激。

【问题讨论】:

  • 这取决于数据的类型。你要发送什么数据?
  • 您好,我只是发送一个带有模拟 Android Motion 事件和四元数值的 json 对象。它应该只有几个字节。
  • TCP 应该没问题

标签: android unity3d


【解决方案1】:

如果您可以使用 AIDL 远程回调,您可以以非常低的延迟做到这一点。

https://doc.lagout.org/programmation/Android/Android%20Programming_%20Pushing%20the%20Limits%20%5BHellman%202013-11-04%5D.pdf

第 141 页aidl 回调对此进行了说明。

在我的例子中,我使用的是每秒 1500 个频率,所以它仍然以非阻塞方式工作。

【讨论】:

  • 您好,我按照您的示例构建了 2 个使用 AIDL 以几乎 1 毫秒延迟进行通信的 android 应用程序。尽管这看起来很有希望,但我正在努力将这些知识带到 Unity 方面。您知道演示如何在 Unity 前端使用 AIDL 回调的资源吗?
  • github.com/lcbasu/android/blob/master/adt/ApiDemos/src/com/…。我想这个链接应该会有所帮助。尝试调试这个
【解决方案2】:

如果时间是您最关心的问题,您应该使用 TCP 或 UDP。但是,根据您制作的应用程序类型,UDP 和 TCP 的功能可能会有所不同:

What is the difference between TCP and UDP?

【讨论】:

  • 大家好,我终于在后台应用和Unity应用之间实现了UDP通信。我尝试了 2 种不同的方法:a) C# 端的 UDP b) Unity 中 Android 插件中的 Java 中的 UDP。在这两种情况下,我都得到了很多延迟。考虑到它会丢弃数据包,我很惊讶 UDP 会导致延迟,但这就是我正在经历的。有关如何处理的任何提示?
  • @ArunYogannadan 您好,虽然 UDP 比 TCP 快,因为它不期望响应,但您仍然需要优化您发送的包。更大的包肯定会导致更多的延迟。
【解决方案3】:

你不能在没有延迟的情况下发送数据。是的,这对我来说只是一个很好的解决方案,谷歌玩游戏(谷歌实时多人游戏),它主要基于房间,最多 8 个玩家,它建立对等连接,你可以发送 TCP 和UDP 消息。但是每秒说你从 FixedUpdate 函数发送消息的次数。我建议你不要发送太快,每 4 帧发送 1 条消息(取决于你将如何进行网络同步),TCP 可能会堆叠,你永远不会得到想要的结果。UDP更有效,无连接的协议和消息可能会被传递,也可能不会。无论如何你必须做一些网络同步。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-11
    • 1970-01-01
    • 2012-02-11
    • 1970-01-01
    • 1970-01-01
    • 2015-04-24
    • 1970-01-01
    相关资源
    最近更新 更多