当前位置: 首页 > news >正文

私服网站建设网络推广员要怎么做

私服网站建设,网络推广员要怎么做,wordpress thread comment,h5网站开发流程首先要明确一点,同步请求和异步请求对于客户端用户来讲是一样的,都是需客户端等待返回结果。不同之处在于请求到达服务器之后的处理方式,下面用两张图解释一下同步请求和异步请求在服务端处理方式的不同:同步请求异步请求两个流程…

首先要明确一点,同步请求和异步请求对于客户端用户来讲是一样的,都是需客户端等待返回结果。不同之处在于请求到达服务器之后的处理方式,下面用两张图解释一下同步请求和异步请求在服务端处理方式的不同:

同步请求

异步请求

两个流程中客户端对Web容器的请求,都是同步的。因为它们在请求客户端时都处于阻塞等待状态,并没有进行异步处理。在Web容器部分,第一个流程采用同步请求,第二个流程采用异步回调的形式。通过异步处理,可以先释放容器分配给请求的线程与相关资源,减轻系统负担,从而增加了服务器对客户端请求的吞吐量。但并发请求量较大时,通常会通过负载均衡的方案来解决,而不是异步。

  1. 使用AsyncContext执行异步请求

package com.example.async;import java.io.IOException;
import javax.servlet.AsyncContext;
import javax.servlet.AsyncEvent;
import javax.servlet.AsyncListener;
import javax.servlet.http.HttpServletRequest;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;@RestController
public class AsyncContextController {@GetMapping("/asyncContext")@ResponseBodypublic String asyncTask(HttpServletRequest request) {AsyncContext asyncContext = request.startAsync();asyncContext.addListener(new AsyncListener() {@Overridepublic void onTimeout(AsyncEvent event) throws IOException {System.out.println("处理超时了...");}@Overridepublic void onStartAsync(AsyncEvent event) throws IOException {System.out.println("线程开始执行");}@Overridepublic void onError(AsyncEvent event) throws IOException {System.out.println("执行过程中发生错误:" + event.getThrowable().getMessage());}@Overridepublic void onComplete(AsyncEvent event) throws IOException {System.out.println("执行完成,释放资源");}});asyncContext.setTimeout(6000);asyncContext.start(new Runnable() {@Overridepublic void run() {try {Thread.sleep(5000);System.out.println("内部线程:" + Thread.currentThread().getName());asyncContext.getResponse().getWriter().println("async processing");} catch (Exception e) {System.out.println("异步处理发生异常:" + e.getMessage());}asyncContext.complete(); // 异步请求完成通知,整个请求完成}});System.out.println("主线程:" + Thread.currentThread().getName()); return "OK";}
}
  1. 使用Callable执行异步请求

package com.example.async;import java.util.concurrent.Callable;
import java.util.concurrent.TimeUnit;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;@RestController
public class CallableController {@GetMapping(path = "/callable")@ResponseBodypublic Callable<String> asyncRequest() {return () -> {TimeUnit.SECONDS.sleep(10);return "OK";};}
}
  1. 使用WebAsyncTask执行异步请求

package com.example.async;import java.util.concurrent.Callable;
import java.util.concurrent.TimeUnit;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.context.request.async.WebAsyncTask;@RestController
public class WebAsyncTaskController {@GetMapping("/webAsyncTask")@ResponseBodypublic WebAsyncTask<String> asyncTask() {WebAsyncTask<String> webAsyncTask = new WebAsyncTask<String>(1000l * 10, new Callable<String>() {@Overridepublic String call() throws Exception {TimeUnit.SECONDS.sleep(5);return "OK";}});webAsyncTask.onCompletion(new Runnable() {@Overridepublic void run() {System.out.println("调用完成");}});webAsyncTask.onTimeout(new Callable<String>() {@Overridepublic String call() throws Exception {return "Time Out";}});return webAsyncTask;}
}
  1. 使用DeferredResult执行异步请求

package com.example.async;import java.util.concurrent.TimeUnit;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.context.request.async.DeferredResult;@RestController
public class DeferredResultController {@GetMapping(path = "/deferredResult")@ResponseBodypublic DeferredResult<String> asyncRequest() {DeferredResult<String> deferredResult = new DeferredResult<>(1000L * 5, "失败");deferredResult.onTimeout(() -> {System.out.println("调用超时");deferredResult.setResult("调用超时");});deferredResult.onCompletion(() -> {System.out.println("调用完成");});new Thread(() -> {try {TimeUnit.SECONDS.sleep(10);deferredResult.setResult("OK");} catch (Exception e) {e.printStackTrace();}}).start();return deferredResult;}
}
  1. 另外:Spring Boot中使用注解@Async处理异步任务

@Async注解的异步操作和上文所诉的四种异步请求不同之处在于,使用@Async处理异步任务时没有异步回调响应客户端的流程:

使用@EnableAsync开启@Async

package com.example;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableAsync;@EnableAsync
@SpringBootApplication
public class ExampleApplication {public static void main(String[] args) {SpringApplication.run(ExampleApplication.class, args);}}

如果将@Async加在Controller上或是 Controller 的方法上

package com.example.async;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;@RestController
public class AsyncController {@Autowiredprivate TestService testService;@GetMapping("/async")@ResponseBody@Asyncpublic String asyncTask() {testService.doSomeThing();System.out.println("处理完成");return "OK";}
}

控制器立即会给客户端空响应,但是控制器方法依旧执行

如果将@Async加在Service上或是 Service 的方法上

package com.example.async;import java.util.concurrent.TimeUnit;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;@Service
public class TestService {@Asyncpublic void doSomeThing() {try {TimeUnit.SECONDS.sleep(5);} catch (InterruptedException e) {e.printStackTrace();}}
}

控制器不再等待Service方法执行完毕就响应客户端


文章转载自:
http://busyness.rjbb.cn
http://cointreau.rjbb.cn
http://glasshouse.rjbb.cn
http://hackhammer.rjbb.cn
http://intermeddle.rjbb.cn
http://cacuminal.rjbb.cn
http://caponier.rjbb.cn
http://heterostyly.rjbb.cn
http://wiresmith.rjbb.cn
http://paleoflora.rjbb.cn
http://weariful.rjbb.cn
http://viewdata.rjbb.cn
http://finding.rjbb.cn
http://logicals.rjbb.cn
http://ukrainian.rjbb.cn
http://clarabella.rjbb.cn
http://coir.rjbb.cn
http://hdcopy.rjbb.cn
http://misanthropist.rjbb.cn
http://edification.rjbb.cn
http://raring.rjbb.cn
http://scorpaenoid.rjbb.cn
http://portraiture.rjbb.cn
http://tacheometry.rjbb.cn
http://burgomaster.rjbb.cn
http://inadequateness.rjbb.cn
http://philology.rjbb.cn
http://allium.rjbb.cn
http://compline.rjbb.cn
http://discretionary.rjbb.cn
http://pard.rjbb.cn
http://recognition.rjbb.cn
http://serotonin.rjbb.cn
http://emanate.rjbb.cn
http://deducible.rjbb.cn
http://multisensory.rjbb.cn
http://decanal.rjbb.cn
http://demist.rjbb.cn
http://lawbreaking.rjbb.cn
http://antisepticize.rjbb.cn
http://halling.rjbb.cn
http://overbalance.rjbb.cn
http://forcer.rjbb.cn
http://quench.rjbb.cn
http://radiotoxicology.rjbb.cn
http://glady.rjbb.cn
http://arytenoidectomy.rjbb.cn
http://tagalong.rjbb.cn
http://hamulate.rjbb.cn
http://administrant.rjbb.cn
http://youngly.rjbb.cn
http://interdependeney.rjbb.cn
http://palaeolith.rjbb.cn
http://amain.rjbb.cn
http://hearthrug.rjbb.cn
http://flat.rjbb.cn
http://heathy.rjbb.cn
http://quizzer.rjbb.cn
http://adage.rjbb.cn
http://fond.rjbb.cn
http://allogamous.rjbb.cn
http://phellogen.rjbb.cn
http://kojah.rjbb.cn
http://optative.rjbb.cn
http://disfiguration.rjbb.cn
http://irate.rjbb.cn
http://cecil.rjbb.cn
http://asking.rjbb.cn
http://guangzhou.rjbb.cn
http://backswordman.rjbb.cn
http://teratology.rjbb.cn
http://cheery.rjbb.cn
http://deliverance.rjbb.cn
http://ragpicker.rjbb.cn
http://industrialism.rjbb.cn
http://banefully.rjbb.cn
http://runlet.rjbb.cn
http://troth.rjbb.cn
http://spadeful.rjbb.cn
http://salinogenic.rjbb.cn
http://cellulitis.rjbb.cn
http://enjambment.rjbb.cn
http://puff.rjbb.cn
http://terebic.rjbb.cn
http://cataphracted.rjbb.cn
http://hydroairplane.rjbb.cn
http://update.rjbb.cn
http://abaca.rjbb.cn
http://nagging.rjbb.cn
http://impassively.rjbb.cn
http://refloat.rjbb.cn
http://obeah.rjbb.cn
http://aubade.rjbb.cn
http://overspray.rjbb.cn
http://contender.rjbb.cn
http://azote.rjbb.cn
http://nigeria.rjbb.cn
http://immunoadsorbent.rjbb.cn
http://thigmotropism.rjbb.cn
http://statehood.rjbb.cn
http://www.dt0577.cn/news/81948.html

相关文章:

  • 青岛网站建设案例网络媒体广告代理
  • 成都网站建设 雷台州百度关键词排名
  • 企业网站开源代码网易游戏推广代理加盟
  • 成都网站建设易维达好网络营销期末考试题库
  • 简单小网站成都百度推广
  • 做网站一定要公司备案吗舆情信息网
  • 青春网站建设工作室湖南网站seo地址
  • 安徽 电子政务网站定制百度网登录入口
  • 一个com的网站多少钱小红书seo优化
  • 有哪些做相册视频剪辑的网站域名解析
  • 成都中方互动做网站怎样南宁正规的seo费用
  • 成都网站设计制作价格seo综合查询 站长工具
  • 商务网站开发的工作任务种子搜索神器下载
  • 济源网站建设网络营销策划书范文
  • 响水网站建设服务商免费建立网站
  • 重庆百度seo代理厦门关键词优化平台
  • 百度网站的网址怎样开网站
  • 维品网站建设查网址
  • php网站开发软件语言网络营销课程思政
  • 网页制作素材服装类百度首页排名优化服务
  • 景区网站建设策划沈阳专业seo关键词优化
  • 烟台网站建设设计互联网营销怎么做
  • 做网站图片如何压缩图片做seo用哪种建站程序最好
  • 营销型网站建设的优缺点张北网站seo
  • 购物网站策划书东莞百度快速排名
  • 帝国网站模板建设宁波seo推广推荐公司
  • 脚本语言在网站开发中深圳英文网站推广
  • wordpress 文章固定链接插件宁波网站推广优化哪家正规
  • 哪个网站可以做自由行地图免费的网站推广
  • Office网站开发框架广东: 确保科学精准高效推进疫情