gpt4 book ai didi

javascript - 发送 GET 请求,同时读取流

转载 作者:行者123 更新时间:2023-12-02 22:28:34 26 4
gpt4 key购买 nike

场景如下:

我正在使用 OkHttp 异步发送 get 请求,效果很好。代码如下:

private void doGetRequest(String url){
Request request = new Request.Builder()
.url(url)
.build();

client.newCall(request)
.enqueue(new Callback() {

@Override
public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException {
Log.i(TAG,"Response: " + response);
}

@Override
public void onFailure(@NotNull Call call, @NotNull final IOException e) {
// Error
Log.e(TAG,"Error: " + e);
requireActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(requireActivity(), getResources().getString(R.string.error, e.toString()), Toast.LENGTH_SHORT).show();
}
});
}
});
}

我还使用 AsyncTask 来解码 Mjpeg 流。在我的 AsyncTask 的 doInBackground 函数中,我有:

protected Long doInBackground(String... urls) {

//Get InputStream
URL url = new URL(urls[0]);
HttpURLConnection connect = (HttpURLConnection) url.openConnection();
DataInputStream inputStream = new DataInputStream (connect .getInputStream());
mjpegStream = new MjpegInputStreamDefault(inputStream);

//Start decoding mjpeg stream
while (doRun) {
publishProgress(mjpegStream.readMjpegFrame());
}
}

重要的一点是我不断地通过 WIFI 从我必须向其发送 GET 请求的同一设备解码网络流。

我遇到的问题是,一旦我启动 mjpeg 流,我的 GET 请求就会停止被接收。如果我停止 mjpeg 流,最终我的 GET 请求会收到,假设尚未达到超时时间。

我的问题是我可以同时向同一设备发送和接收内容吗?如果是这样,为什么在接收我的 mjpeg 流时没有收到我的请求?

最佳答案

最终弄清楚发生了什么,并认为我应该提供一些解释来帮助 future 的读者

发生了什么?

基本上,正如您在这个快速图表中看到的,有两段代码尝试使用相同的连接。

我的流媒体代码不断地占用 WiFi 摄像头,阻止我的发送代码建立新连接,如下所示:

Diagram explaining problem

如何避免/解决方案?

为了纠正这个问题,我们需要共享连接。流以 50 fps 的速度更新,但手机可以更快地处理网络事务。这意味着我们不需要不断处理 mjpeg 流来获得 50fps,因此在我的情况下,在发送命令时让它时不时地等待就可以了。

简单地说,接收代码需要知道,如果有命令正在等待发送,它就无法继续使用连接。有很多方法可以做到这一点,具体实现将取决于项目的整体设计。

一个好的方法是使用可观察模式。 RxJava 实现了可观察模式等的最佳思想。

其他想法起初我以为我可以使用某种双工方法,其中发送代码和接收代码可以独立运行,但除非我弄错了,否则我认为在这种情况下这是不可能的,因为我的接收代码将始终阻止连接.

关于javascript - 发送 GET 请求,同时读取流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58986985/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com