SourceNode --|                                  |--> StorageLocation     (remote)
               |--> MyService <-ipc-> CallerApp --|                        (Android)

MyServiceCallerApp位于手机内部; StorageLocation可以位于电话内部,也可以位于电话外部的另一个远程节点。 该方案如下:

  1. CallerApp通过AIDL告诉Android服务获取文件X; 文件X非常大。
  2. MyService已连接到远程SourceNode,并开始从该远程节点接收X。
  3. 现在,当MyService从SourceNode接收X时,它需要在读取时将读取的字节传递给CallerApp。
  4. 结论:使用手机作为代理时,数据从左侧的SourceNode一直到右侧的StorageLocation。 MyService和CallerApp是不同的过程。

这里的问题是如何有效地在MyService和CallerApp之间进行IPC。 在某些情况下,文件X将本地保存在CallerApp的专用存储中。 在其他情况下,文件X将被发送到远程存储位置,并且电话以某种方式充当传输的代理。 您可以将StorageLocation视为本地电话存储或远程云提供商。

  • 我尝试使用类似于这种方法的方法,使用pipe pairtransfer thread但是在高端电话上,我在MyService和CallerApp之间传输数据的速度仅超过5 KB /秒。 如果传输数百MB,这太慢了。
  • 我正在考虑使用ContentProvider ,但是根据我的理解,必须先将文件X保存到MyService中,然后CallerApp才能使用它。 文件X不能先保存到MyService中,然后再传递到CallerApp中,因为它可能太大,甚至无法容纳到可用的存储空间中(在这种情况下,电话仅是数据的代理)。
  • 还没有尝试使用local sockets但是如果管道对很慢,我不知道它是否会更好。

关于如何解决的任何见解,即如何在MyService和CallerApp之间高效地传输大量数据?

(此外,是否可以使用管道对作为中介直接从MyService写入CallerApp的私有存储位置,即MyService将从SourceNode套接字读取并写入在CallerApp中创建的文件的OutputStream句柄?)

  ask by Daniel translate from so

本文未有回复,本站智能推荐:

2回复

Android:ParcelFileDescriptor“createpipe”方法64KB错误

我有一个使用ContentProvider类的应用程序。 在openFile方法中,我需要能够解码文件并作为数据流返回。 因此,我决定使用内置管道。 问题是,如果我使用createPipe方法,则只能向其中写入64KB。 之后,我无法将数据写入管道。 另请注意,在数据完全解码并写入管
2回复

在不同进程之间传输cv::Mat对象的最佳方法是什么?

我正在尝试将几个cv :: Mat对象从一个程序传递到另一个程序,二者均以C ++实现,并且最好并行运行。 cv :: Mat中没有图像,因此imread和imwrite在这里没有用(我们无法使用传统的图像压缩方法来压缩数据)。 一种解决方案是将矩阵写入文件(例如CSV文件)中,但是由于程序
2回复

在进程之间异步传递文件描述符

我正在实现一个Web服务器,需要在其中使父进程执行以下操作: 在开始时fork()新工作进程(一个池)。 永远循环,侦听传入的请求(通过套接字通信)。 将套接字描述符(由accept()函数返回)放入队列。 并且工作进程将执行以下操作: 创建后,将永远循环查看队列中是
1回复

在Linux上的C++中使用两个线程之间的管道进行错误/意外行为

我正在尝试让两个线程通过Linux上的C ++中的管道进行通信(Ubuntu,12.04、3.8.13)。 我只想从一个线程向管道写入一个字符,而让另一个线程读取并显示它。 我正在使用clone()函数创建线程。 这与一些作业有关,所以我不能使用pthreads或其他东西。 该程序:
5回复

2个进程(应用程序)之间共享内存

我找不到这个问题的任何有用的答案,尽管已经多次以不同的方式提出这个问题。 我想在两个进程(两个不同的应用程序)之间共享一个内存,以便其中一个可以写入该内存而另一个可以读取。 这在.NET中可行吗? 怎么样? 谢谢
1回复

C-顶层过程和底层(叶)过程之间的命名管道

我正在尝试从最底层的叶子进程写入命名管道,并从最顶层的进程读取管道。 为此,我首先在顶层进程中创建FIFO,然后使用for循环派生更多进程。 在for循环中,我正在检查叶子进程,如果它是叶子,则正在写FIFO并从循环中断开。 然后,在循环之后,我试图在顶层进程中从FIFO中读取。 这不
2回复

使用管道将文件I/O引导到另一个进程

刚开始学习/使用管道,并且想知道如何将应用程序的文件输出路由到管道中,以便另一个应用程序可以使用它。 确切地说,我想将ffmpeg的输出(转码后的视频数据)通过管道传递到我的应用程序中以使用它。 如果我创建一个类似/tmp/out.mp4的命名管道并将其作为输出文件名提供给ffmpeg,则
3回复

如何从CGI中分离进程以便我可以从内存中存储和读取文件?

我是否有可能从内存中读取文本文件的CGI脚本生成像进程一样的分离守护进程,然后在下一个cgi执行中重新访问内存,使用管道读取数据? 大多数托管ISP的,是否允许分离进程? 内存管道是否快速,并且易于在unix / linux系统上编码/工作? 有没有一个解决方案,可以在不使用任何额外的