【问题标题】:halt servlet response停止 servlet 响应
【发布时间】:2010-09-15 12:17:34
【问题描述】:

我面临以下问题。我有一个 servlet,它通过视频剪辑为客户端请求提供服务。但是这个视频剪辑是另一个线程(转码器)的产物。如果由于转码器线程尚未完成其工作而未准备好下载剪辑,则客户端请求将失败! 关于如何处理这种情况的任何建议?如何在线程准备好转码剪辑之前停止 servlet 的响应?

提前致谢! 安东尼

【问题讨论】:

标签: java multithreading servlets


【解决方案1】:

这里最直接的做法是使用Future。向转码器提交请求,让它立即返回一个Future。然后 HTTP 线程可以阻止这个未来调用 get,直到视频准备好。

加入对我来说不是一个好的选择。 Thread#join 阻塞直到目标线程终止,但线程在完成工作后是否终止是实现细节。例如,如果转码器将使用缓存线程池,则 app.休息。

【讨论】:

  • 你们俩的回答都很好。我会试试看哪一个适合我的需要。谢谢你们俩
  • 再一次,只有在阻塞几秒钟时才这样做。对于更长的任务,您不能只将 servlet 和用户的浏览器挂在那里。
【解决方案2】:

您可以通过常规方式(睡眠、等待、加入、Future#get)延迟 servlet 的执行。

在您的情况下,听起来您想加入对视频进行转码的线程(或获取 Future)。

但是,只有在您需要阻止的时间仅为几秒钟时,您才应该这样做。否则,客户端浏览器可能会导致请求超时,或者用户体验很差。如果转码工作需要更长的时间,请考虑输出进度条之类的内容,它会不断轮询服务器,直到任务完成,然后才尝试加载视频剪辑。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-06
    • 2013-04-29
    • 2021-08-19
    相关资源
    最近更新 更多