视频直播系统源码,异步处理实现代码分析

视频直播系统源码,异步处理实现代码分析

复制代码
 @Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  System.out.println("doget");
  method3(request,response);

}

/**
     * 使用asyncContext执行异步请求
     * @param request
     * @param response
     */
public void method1(HttpServletRequest request, HttpServletResponse response) {
  //获取异步上下文
  AsyncContext asyncContext = request.startAsync();
  //开启异步处理过程
  asyncContext.start(() -> {
    //耗时处理
    try {
      Thread.sleep(2000);
      //通过AsyncContext返回 respsonse
      asyncContext.getResponse().getWriter().write("Hello World1!");
    } catch (Exception e) {
      e.printStackTrace();
    }
    //异步处理完成
    asyncContext.complete();
  });
}
/**
     * 使用自身线程池来执行异步请求
     * @param request
     * @param response
     */
public void method2(HttpServletRequest request, HttpServletResponse response) {
  AsyncContext asyncContext = request.startAsync();
  Runnable runnable = () -> {
    try {
      Thread.sleep(2000);
      asyncContext.getResponse().getWriter().write("Hello World2!");
    } catch (Exception e) {
      e.printStackTrace();
    }
    asyncContext.complete();
  };
  new Thread(runnable).start();
}
/**
     * 使用asyncContext.dispath()来重新提交请求
     * @param request
     * @param response
     */
public void method3(HttpServletRequest request, HttpServletResponse response) {
  Object result = request.getAttribute("result");
  if(result==null) {
    AsyncContext asyncContext = request.startAsync();
    Runnable runnable = () -> {
      try {
        Thread.sleep(2000);
        //
        request.setAttribute("result", "Hello World3!");
      } catch (Exception e) {
        e.printStackTrace();
      }
      asyncContext.dispatch();
    };
    new Thread(runnable).start();
  }else{
    try {
      response.getWriter().write(result.toString());
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}
复制代码

 

上面列了AsyncContext使用的三种方式:

  •  commit(): 标识异步事件的结束,http通道关闭
  • 使用AsyncConext线程池执行任务
  • 使用业务线程池执行任务
  •  dispath(): 通知servlet容器,重新发起请求(doService()会收到两次请求)

以上就是视频直播系统源码,异步处理实现代码分析, 更多内容欢迎关注之后的文章

 

posted @   云豹科技-苏凌霄  阅读(11)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
历史上的今天:
2023-03-16 视频直播app源码,Swift动态修改Icon,消除系统弹窗
2023-03-16 在线直播源码,npm设置镜像的方法 可切换
2023-03-16 直播平台源代码,数字化大屏地图轮播的实现echarts
2022-03-16 一对一直播源码,实现一个简单的登录界面
2022-03-16 app直播源码,自定义两种Activity切换动画实现
2022-03-16 ​直播平台开发,实现点击跳转外部链接时的跳转步骤
点击右上角即可分享
微信分享提示