精华内容
下载资源
问答
  • 同步请求异步请求的区别先解释一下同步和异步的概念同步是指:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式。异步是指:发送方发出数据后,不等接收方发回响应,接着发送下个数据包的通讯...

    同步请求和异步请求的区别

    先解释一下同步和异步的概念

    同步是指:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式。

    异步是指:发送方发出数据后,不等接收方发回响应,接着发送下个数据包的通讯方式。

    同步通信方式与异步通信的概念

    同步通信方式要求通信双方以相同的时钟频率进行,而且准确协调,通过共享一个单个时钟或定时脉冲源保证发送方和接收方的准确同步,效率较高;

    异步通信方式不要求双方同步,收发方可采用各自的时钟源,双方遵循异步的通信协议,以字符为数据传输单位,发送方传送字符的时间间隔不确定,发送效率比同步传送效率低。

    使用者用于调用WEB服务的通信选择:同步或异步。

    使用者可以同步或异步实现服务调用。从使用者的观点来看,这两种方式的不同之处在于:同步——使用者通过单个线程调用服务;该线程发送请求,在服务运行时阻塞,并且等待响应。

    异步——使用者通过两个线程调用服务;一个线程发送请求,而另一个单独的线程接收响应。

    术语同步 和异步 经常与顺序 和并发 混淆了。后面的这两个术语与执行单独的任务必须遵循的顺序有关,而同步和异步 与线程执行单个任务(如调用单个服务)的方式有关。理解同步和异步调用之间的不同的一种很好的方法是考虑崩溃恢复的后果:同步——如果使用者在服务运行的过程中阻塞时崩溃了,当它重新启动时,将无法重新连接到正在进行的调用,所以响应丢失了。使用者必须重复调用过程,并且期望这次不会崩溃。

    异步——如果使用者在发送了请求之后等待响应时崩溃了,当它重新启动时,可以继续等待响应,所以响应不会丢失。

    崩溃恢复不是同步和异步调用之间的唯一不同,但是如果您尝试确定某个调用采用哪一种方式,请考虑每一种调用如何处理崩溃恢复,这通常可以给您一个很好的答案.

    ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

    在 Java Web 开发中使用 Ajax 时,重要的是完整理解同步 和异步 通信模型的区别(请参阅 参考资料)。对异步通信模型支持的缺乏,会对客户端开发、与 Web 框架的集成、标记库的使用、IDE 的使用以及线程的行为有影响。

    在同步请求/响应通信模型中,总是浏览器(与 Web 服务器、应用服务器或 Web 应用程序相对)发起请求(通过 Web 用户)。接着,Web 服务器、应用服务器或 Web 应用程序响应进入的请求。在处理同步请求/响应对期间,用户不能继续使用浏览器。

    在异步请求/响应通信模型中,浏览器(通过 Web 用户)到 Web 服务器、应用服务器或 Web 应用程序的通信(以及反过来)是解耦的。在异步请求/响应对的处理中,Web 用户在当前异步请求被处理时还可以继续使用浏览器。一旦异步请求处理完成,异步响应就被通信(从 Web 服务器、应用服务器或 Web 应用程序)回客户机页面。典型情况下,在这个过程中,调用对 Web 用户没有影响;他们不需要等候响应。

    展开全文
  • 先解释一下同步异步的概念同步是指:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式。 异步是指:发送方发出数据后,不等接收方发回响应,接着发送下个数据包的通讯方式。同步通信方式与异步...

    先解释一下同步和异步的概念

    同步是指:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式。 异步是指:发送方发出数据后,不等接收方发回响应,接着发送下个数据包的通讯方式。

    同步通信方式与异步通信的概念

    同步通信方式要求通信双方以相同的时钟频率进行,而且准确协调,通过共享一个单个时钟或定时脉冲源保证发送方和接收方的准确同步,效率较高;

    异步通信方式不要求双方同步,收发方可采用各自的时钟源,双方遵循异步的通信协议,以字符为数据传输单位,发送方传送字符的时间间隔不确定,发送效率比同步传送效率低。

    使用者用于调用WEB服务的通信选择:同步或异步。

    使用者可以同步或异步实现服务调用。从使用者的观点来看,这两种方式的不同之处在于:

    同步——使用者通过单个线程调用服务;该线程发送请求,在服务运行时阻塞,并且等待响应。

    异步——使用者通过两个线程调用服务;一个线程发送请求,而另一个单独的线程接收响应。

    术语同步 和异步 经常与顺序 和并发 混淆了。后面的这两个术语与执行单独的任务必须遵循的顺序有关,而同步和异步 与线程执行单个任务(如调用单个服务)的方式有关。理解同步和异步调用之间的不同的一种很好的方法是考虑崩溃恢复的后果:

    同步——如果使用者在服务运行的过程中阻塞时崩溃了,当它重新启动时,将无法重新连接到正在进行的调用,所以响应丢失了。使用者必须重复调用过程,并且期望这次不会崩溃。

    异步——如果使用者在发送了请求之后等待响应时崩溃了,当它重新启动时,可以继续等待响应,所以响应不会丢失。

    崩溃恢复不是同步和异步调用之间的唯一不同,但是如果您尝试确定某个调用采用哪一种方式,请考虑每一种调用如何处理崩溃恢复,这通常可以给您一个很好的答案.

    ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

    在 Java Web 开发中使用 Ajax 时,重要的是完整理解同步 和异步 通信模型的区别(请参阅 参考资料)。对异步通信模型支持的缺乏,会对客户端开发、与 Web 框架的集成、标记库的使用、IDE 的使用以及线程的行为有影响。

    在同步请求/响应通信模型中,总是浏览器(与 Web 服务器、应用服务器或 Web 应用程序相对)发起请求(通过 Web 用户)。接着,Web 服务器、应用服务器或 Web 应用程序响应进入的请求。在处理同步请求/响应对期间,用户不能继续使用浏览器。

    在异步请求/响应通信模型中,浏览器(通过 Web 用户)到 Web 服务器、应用服务器或 Web 应用程序的通信(以及反过来)是解耦的。在异步请求/响应对的处理中,Web 用户在当前异步请求被处理时还可以继续使用浏览器。一旦异步请求处理完成,异步响应就被通信(从 Web 服务器、应用服务器或 Web 应用程序)回客户机页面。典型情况下,在这个过程中,调用对 Web 用户没有影响;他们不需要等候响应。

    Jquery ajax 中提交数据可以用同步与异步1、同步与异步之间究竟有什么不同呢?、2、在什么情况下使用呢? 同步:提交请求->等待服务器处理->处理完毕返回这个期间客户端浏览器不能干任何事

    异步: 请求通过事件触发->服务器处理(这是浏览器仍然可以作其他事情)->处理完毕 一、我的理解: 1、一心一意:当前只能做一件事,其他事情必须等当前的事情完成,才能继续后面的事情。2、三心二意:同时可以做多件事情:左手按着空格键,右手可以不断的击打鼠标,眼睛还要同时看着屏幕,很辛苦。 二、请看下面这段脚本: functionValidateClick()

    { var areaNo=$("#").val(); if(areaNo) { alert("请选择"); return false; } $.ajax({

    cache:"False",

    type:"POST", (A)//async: false, 【(A)】

    url:"Validate.ashx",

    data:$("#form1").serialize(),

    success:function(o)

    {

    if(o=="ERROR") { alert("输入错误!"); return false;}

    else if(o=="OK")

    { alert("正确!");return true; }

    else

    { alert("其他错误!"); return false;}

    },

    error:function(xhr, ajaxOptions, thrownError)

    { alert("网络异常,稍后重试!"); return false; }

    }); // 【(B) 】 //alert("这里");return true;}

    在(A)处:默认未true,表示使用异步进行传输, 当async: true时:我们把数据用POST提交数据到url页面后,会同时执行【(B) 】处的方法或者 函数等,不管(A)处是否已经返回结果,(B)已经执行了,当(A)中返回结果时,就根据指定的if来弹出提示, 当async: false时:这个时候就必须等待(A)处返回结果,再执行if判断语句,判断完成之后,在接着执行(B)处的函数。

    展开全文
  • 这个时候可能由于种种原因导致服务器还没有响应我们的请求,但是因为我们采用了异步执行方式,所有包含AJAX请求代码的函数中的剩余代码将继续执行。如果我们是将请求结果交由另外一个JS函数去处理的,那么,这个时候...

    一、区别

    ①、异步:
    在异步模式下,当我们使用AJAX发送完请求后,可能还有代码需要执行。这个时候可能由于种种原因导致服务器还没有响应我们的请求,但是因为我们采用了异步执行方式,所有包含AJAX请求代码的函数中的剩余代码将继续执行。如果我们是将请求结果交由另外一个JS函数去处理的,那么,这个时候就好比两条线程同时执行一样。如下:

    $.ajax({ 
         type:"POST",
         url:"Venue.aspx?act=init",
         dataType:"html",
         success:function(result){  //function1()
           f1();
           f2(); 
        }
         failure:function (result) { 
          alert('Failed'); 
         },
     }
     function2();
    

    当ajax发送请求后,在等待server端返回的这个过程中,前台会继续 执行ajax块后面的脚本,直到server端返回正确的结果才会去执行success,也就是说这时候执行的是两个线程,ajax块发出请求后一个线程 和ajax块后面的脚本(另一个线程)
    在上例中,当ajax块发出请求后,他将停留function1(),等待server端的返回,但同时(在这个等待过程中),前台会去执行function2()。

    ②、同步
    在同步模式下,当我们使用AJAX发送完请求后,后续还有代码需要执行,我们同样将服务器响应交由另一个JS函数去处理,但是这时的代码执行情况是:在服务器没有响应或者处理响应结果的JS函数还没有处理完成return时,包含请求代码的函数的剩余代码是不能够执行的。就好比单线程一样,请求发出后就进入阻塞状态,知道接触阻塞余下的代码才会继续执行。如下:

    $.ajax({
        type:'post',
     url:"<c:url value='/device/org/' />"+val,
     data:{'orgId':val},
     success:function(data){//function(1)
     name=data.orgName;
     },
     dataType:"json",
    
     async:false
    });
    
    function(2);
    

    当执行当前AJAX的时候会停止执行后面的JS代码,直到AJAX执行完毕后时,才能继续执行后面的JS代码。
    当把async设为false时,这时ajax的请求时同步的,也就是说,这个时候ajax块发出请求后,他会等待在function1()这个地方,不会去执行function2(),直到function1()部分执行完毕。

    二、使用场景
    ①、异步:发送一个请求,不需要等待返回,随时可以再发送下一个请求
    ②、同步:一步一步来操作,等待请求返回的数据,再执行下一步

    三、总结:
    异步: 多线程;无需等待
    同步: 单线程,需要等待(容易阻塞进程,页面卡顿用户体验不好等)

    展开全文
  • Android 中Okhttp的同步请求异步请求

    热门讨论 2021-05-28 22:01:17
    同步请求异步请求的概念: 简单地说,同步就是发出一个请求后什么事都不做,一直等待请求返回后才会继续做事;异步就是发出请求后继续去做其他事,这个请求处理完成后会通知你,这时候就可以处理这个回应了。 写了...

    前言: 在过去,Android上发送HTTP请求一般有两种方式:HttpURLConnection和HttpClient,由于HttpClient存在的API数量过多,扩展困难等缺点,在Android6.0系统中,HttpClient的功能被完全移除了。
    而 OkHttp 是由Square公司开发的,OkHttp在接口封装上做的简单易用,比起原生的HttpURLConnection,可以说是有过之而无不及,现在已经成为了广大Android开发者首选的网络通信库。

    同步请求与异步请求的概念:

    简单地说,同步就是发出一个请求后什么事都不做,一直等待请求返回后才会继续做事;异步就是发出请求后继续去做其他事,这个请求处理完成后会通知你,这时候就可以处理这个回应了。

    写了个Demo去理解Okhttp中的get同步请求与异步请求,和post同步请求与异步请求
    在这里插入图片描述
    1.get的同步请求,其中的讲解,已经在代码中注释了出来。

    //get同步请求
        public void getSync(View view) {
            //在Android 中完成网络请求必须在子线程中完成
            new Thread(new Runnable() {
                @Override
                public void run() {
                    OkHttpClient okHttpClient = new OkHttpClient();
                    Request request = new Request.Builder().url("http://www.httpbin.org/get?a=1&b=2").build();
                    //准备好请求的Code对象
                    Call call = okHttpClient.newCall(request);
                    try {
                        //同步请求要创建子线程,是因为execute()方法,会阻塞后面代码的执行
                        //只有执行了execute方法之后,得到了服务器的响应response之后,才会执行后面的代码
                        //所以同步请求要在子线程中完成
                        Response response = call.execute();
                        //把服务器给我们响应的字符串数据打印出来
                        Log.i(TAG,"getSync:"+response.body().string());
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }).start();
        }
    

    2.get异步请求:

    //get的异步请求
        public void getAsync(View view) {
            //定义okhttp对象
            OkHttpClient okHttpClient = new OkHttpClient();
            Request request = new Request.Builder().url("http://www.httpbin.org/get?a=1&b=2").build();
            Call call = okHttpClient.newCall(request);
            //异步请求:不用创建子线程
            //enqueue()并不会阻塞代码的执行,不需要与服务器请求完成之后,才会执行后面的代码
            //而且enqueue内部会为我们创建子线程
            call.enqueue(new Callback() {
                @Override
                public void onFailure(@NotNull Call call, @NotNull IOException e) {
                }
    
                @Override
                public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException {
                    if (response.isSuccessful()){
                        Log.i(TAG,"getAsync:"+response.body().string());
                    }
                }
            });
    
        }
    
    

    3.post同步请求:

     //post同步请求
        public void postSync(View view) {
            new Thread(new Runnable() {
                @Override
                public void run() {
                    OkHttpClient okHttpClient = new OkHttpClient();
                    //post请求规定,把参数放在请求体里面,用form表单的方式来添加我们的请求体
                    FormBody formBody = new FormBody.Builder().add("a", "10000").add("b", "15000").build();
                    Request request = new Request.Builder().url("http://www.httpbin.org/post")
                            .post(formBody)
                            .build();
                    Call call = okHttpClient.newCall(request);
                    try {
                        Response response = call.execute();
                        Log.i(TAG,"postSync:"+response.body().string());
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }).start();
        }
    

    4.post的异步请求:

     //post异步请求
        public void postAsync(View view) {
            OkHttpClient okHttpClient = new OkHttpClient();
            FormBody formBody = new FormBody.Builder().add("a", "1000").add("b", "2000").build();
            Request request = new Request.Builder().url("http://www.httpbin.org/post")
                    .post(formBody)
                    .build();
            Call call = okHttpClient.newCall(request);
            call.enqueue(new Callback() {
                @Override
                public void onFailure(@NotNull Call call, @NotNull IOException e) {
    
                }
    
                @Override
                public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException {
                    if (response.isSuccessful()){
                        Log.i(TAG,"postAsync:"+response.body().string());
                    }
                }
            });
        }
    

    上面用到的http服务器是公用的,需要的拿去用:地址www.httpbin.org/

    新增:

    使用OkHttp 上传图片到服务器

    private void UpLoadImage(String pictPath, String fileName) { //参数1:图片路径 参数2:图片名称
            new Thread(new Runnable() {
                @Override
                public void run() {
                    String url = "具体的URL地址";
                    //定义OkHttp
                    OkHttpClient okHttpClient = new OkHttpClient();
                    MediaType JSON = MediaType.parse("multipart/form-data");
                    //定义请求体
                    RequestBody body = new MultipartBody.Builder()
                            .setType(MultipartBody.FORM)
                            .addFormDataPart("file", fileName,
                                    RequestBody.create(JSON, new File(pictPath)))
                            .build();
                    try {
                        //执行OkHttp
                        Request request = new Request.Builder()
                                .post(body)
                                .url(url)
                                .build();
                        Response response = okHttpClient.newCall(request).execute();
                        String ss = response.body().string();
                        ResultMsg resultMsg = new Gson().fromJson(ss, ResultMsg.class);
                        if (resultMsg.Result.equals("1")) {
                            Looper.prepare();
                            Toast.makeText(ChangeInformationActivity.this, "图片上传成功!", Toast.LENGTH_SHORT).show();
                            Looper.loop();
                        } else {
                            Looper.prepare();
                            Toast.makeText(ChangeInformationActivity.this, resultMsg.Message, Toast.LENGTH_SHORT).show();
                            Looper.loop();
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
    
                }
            }).start();
        }
    

    以上就是Okhttp框架的简单实用~,如有不当之处,还望各位网友加以指正!

    展开全文
  • 在某些时候,须要把异步调用模拟成同步调用的形态。例如,基于基于异步通讯的客户端须要同步调用。 :-)异步要实现这个转换,能够有多种实现方法:this1。很经常使用的方法,应用循环机制:spabooleanflag = false;...
  • 同步是指:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式。 异步是指(async):发送方发出...async/await是一个用同步思维解决异步问题的方案(等结果出来之后,代码才会继续往下执行) vue用asyn
  • 同步请求异步请求的区别并发先解释一下同步和异步的概念同步是指:发送方发出数据后,等接收方发回响应之后才发下一个数据包的通信方式。异步是指:发送方发出数据后,不等接收方发回响应,接着发送下个数据包的...
  • 同步请求异步请求 同步请求:阻塞 1、表单提交,是同步请求 ........ 2、超级链接访问,是同步请求 <a href=”register?user_name=fsd&user_pwd=123” >点击提交</a> 3、直接访问URL地址,是...
  • ajax async异步请求和同步请求ajax是指异步加载。这个异步是相对于页面来说的,页面不刷新就加载服务器数据。ajax中的请求又分为同步请求异步请求,这里是相对于进程来说的,ajax异步请求,发送请求了不用等服务器...
  • $.post异步请求(jQuery对原生ajax的封装): $.post("url",{ },function(){ console.log("ppp"); ...同步请求(async:同步false、异步true,默认为true): $.ajax({url:"xx/xx/xx",type:"post
  • 【C#进阶系列】08 方法 实例构造与引用类型 之前的章节其实已经写过了引用类型的构造过程: 首先当然是,在堆中,为引用类型的实例对象分配内存,然后初始化对象的附加字段(即类型对象指针和同步块索引). 这个时候为...
  • ajax同步异步的差异, 先看2段代码:代码一:Synchronize = function(url,param) {function createXhrObject() {var http;var activeX = [ "MSXML2.XMLHTTP.3.0", "MSXML2.XMLHTTP", "Microsoft.XMLHTTP" ];try {...
  • ajax相关知识点一个对象 如果没有对应的属性 n那么值是...同步异步、阻塞与非阻塞目录1、同步异步1.1 、概念描述1.2 、消息通知1.3、场景比喻2 、阻塞与非阻塞2.1 、概念描述2.2、 场景比喻3、同步/异...
  • 并且把ajax请求中的async属性设置为了false(同步),这样只有等到我ajax请求后才能继续执行下面的代码,而不是一说为年供发架据制个似业告了到会和大效以插各近步直了轻一过都业器项的务问一消进载滚效果达件种近...
  • Vue异步发送请求转为同步发送请求

    千次阅读 2021-07-02 15:38:33
    于是我查阅了相关资料,vue的异步发送请求在某些场景确实是不好用的,于是自己编写了同步发送请求的方法。 2、解决方法 (1)关闭异步请求 import Vue from 'vue' Vue.prototype.ajax = function(url, t
  • XMLHttpRequest 让发送一个HTTP请求变得非常容易...通过XMLHttpRequest生成的请求可以有两种方式来获取数据,异步模式或同步模式。请求的类型是由这个XMLHttpRequest对象的open()方法的第三个参数async的值决定的。...
  • ajax同步异步的差异, 先看2段代码:代码一:Synchronize = function(url,param) {function createXhrObject() {var http;var activeX = [ "MSXML2.XMLHTTP.3.0", "MSXML2.XMLHTTP", "Microsoft.XMLHTTP" ];try {...
  • http同步请求 一般使用httpClient实现private void sendRequest() throws Exception{String path ="/statistic/info";CloseableHttpClient httpClient = HttpClients.createDefault();// 创建一个 GET 请求...
  • 1、异步同步的概念同步调用:调用方在调用过程中,持续等待返回结果。...3、异步调用转同步的5种方式1、使用wait和notify方法2、使用条件锁3、Future4、使用CountDownLatch5、使用CyclicBarrier4、...
  • 历史遗留项目,前人封装了一个全局的ajax请求,这个项目所有的请求都用的这个方法,发现所有的请求同时同步的,页面卡顿,但是改成异步之后,请求的数据就报错Null,请教该如何优化封装的ajax请求AjaxRequest: ...
  • ajax有同步请求异步请求,同步请求是指同一个时间点只允许执行一个进程,异步请求是指同一个时间点可以执行多个进程。ajax对象.open(方式get/post,url地址,[异步true]同步false);ajax是可以与服务器进行(异步或...
  • 异步:发送方发出数据后,不等接收方发回响应,接着发送下个数据包的通讯方式。简单来讲:各走走的,不用等待上一个请求 同步:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式。 ...
  • 在服务器端判断request来自Ajax请求(异步)还是传统请求(同步):两种请求在请求的Header不同,Ajax 异步请求比传统的同步请求多了一个头参数1、传统同步请求参数accept text/html,application/xhtml+xml,application/...
  • 1、同步GET请求//第一步,创建URLNSURL *url = [NSURLURLWithString:@"http://api.hudong.com/iphonexml.do?type=focus-c"];//第二步,通过URL创建网络请求NSURLRequest *request = [[NSURLRequest alloc]...
  • Ajax请求中的 async:false/true 的作用async....若要将其设置为false,则所有的请求均为同步请求,在没有返回值之前,同步请求将锁住浏览器,用户其它操作必须等待请求完成才可以执行。1 异步请求$.ajax({...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 329,106
精华内容 131,642
关键字:

同步请求转异步