首页 > 编程语言 >视频直播系统源码,异步处理实现代码分析

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

时间:2024-03-16 09:22:21浏览次数:29  
标签:异步 Thread request param response asyncContext 直播 源码

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

 @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()会收到两次请求)

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

 

标签:异步,Thread,request,param,response,asyncContext,直播,源码
From: https://www.cnblogs.com/yunbaomengnan/p/18076711

相关文章

  • springboot仓库管理系统(附:源码+课件)
    项目介绍:管理员system123456客户表(ID客户名称邮编客户地址客户电话联系人联系人电话开户行账号邮箱)供应商表(ID供应商名称邮编供应商地址供应商电话联系人联系人电话开户行账号邮箱)商品表(ID商品名称供应商产地商品规格商品包装生产批号批准文号商......
  • 【毕设级项目】基于嵌入式的智能家居控制板(完整工程资料源码)
    基于嵌入式的智能家居控制板演示效果基于嵌入式的智能家居控制板前言:        随着科技的不断进步,物联网技术得到了突飞猛进的发展。智能家居是物联网技术的典型应用领域之一。智能家居系统将独立家用电器、安防设备连接成一个具有思想的整体,实现家居设备的智能管......
  • 宠物医院管理系统{源码+报告}
    目      录1绪论1.1课题背景1.2 课题研究的现状1.3 课题研究的意义2 需求分析2.1 需求描述2.2 需求功能描述2.3 用例模型2.3.1 业务用例模型2.3.2 系统用例模型2.4 动态模型2.4.1 项目泳道图2.4.2 业务泳道图2.5 静态类模型......
  • 微信小程序开发:异步处理接入的生成式图像卡通化
    书接上文,我们完成了对接阿里云人像动漫化接口,现已完成的界面是这样的: 就是效果看着一般,看看效果: 然后我就在阿里云api市场转悠,就想看看还有没有什么其他奇奇怪怪的api,结果就发现了这个:api链接这里:https://help.aliyun.com/zh/viapi/api-generative-image-cartoon ......
  • [原创] KCP 源码解析(下)
    ikcp_input先从下层协议将数据读出来,并将对应的包头信息解析出来,根据不同的包头命令进入不同的处理逻辑。intikcp_input(ikcpcb*kcp,constchar*data,longsize){ IUINT32prev_una=kcp->snd_una; IUINT32maxack=0, //收到的这组包里最大的ack latest_ts=0......
  • 基于springboot的图书推荐管理系统、图书借阅管理系统,附源码+数据库+论文+PPT,包远程安
    1、项目介绍本论文主要论述了如何使用JAVA语言开发一个图书个性化推荐系统,本系统将严格按照软件开发流程进行各个阶段的工作,采用B/S架构,面向对象编程思想进行项目开发。在引言中,作者将论述图书个性化推荐系统的当前背景以及系统开发的目的,后续章节将严格按照软件开发流程,对系......
  • Django和Fastapi异步性能对比
    突发奇想,我想验证一下Python的异步后端框架的并发能力.目前主流的异步框架有Fastapi,Django和Tornado.顺便我想对比一下它们的性能,但是考虑到Tornado自成一派没有遵循Asgi,没办法屏蔽服务器部分的代码效率,所以我打算只拿Fastapi和Django做下对比.实验设计运行设备:4核8进......
  • MyBatis中经典的五种设计模式源码剖析,打死都不要忘记!
    MyBatis3.5版本中也广泛使用了多种设计模式,下面是其中一些主要使用的设计模式MyBatis一、构建器模式二、工厂模式三、代理模式四、模板方法模式五、装饰器模式六、代理模式一、构建器模式XMLConfigBuilder:用于解析MyBatis配置文件XMLMapperBuilder:用于解析......
  • Java访问者模式源码剖析及使用场景
    访问者模式一、介绍二、报表系统开发三、MyBatis中如何使用访问者模式?一、介绍Java中的访问者(Visitor)模式是一种行为型设计模式,它将数据结构与数据操作分离,使得在不修改数据结构的情况下可以增加新的操作。该模式主要包含以下几个角色:抽象访问者(Visitor):定......
  • ThreadLocal源码解析
    ThreadLocalpublicvoidset(Tvalue){Threadt=Thread.currentThread();ThreadLocalMapmap=getMap(t);if(map!=null)//map不为null,之前设置过情况map.set(this,value);elsecreateMap(t,value);}privatevoidset......