【辨别】真心求辨别,是客户端问题,还是服务端问题?

问题描述

以下的问题,久久不能忘怀。已经思考几天了。我来描述一下问题:我的项目是采用 Language:JavaServer:Tomcat 6 这是一个关于  客户端请求服务器  的问题描述:由于后台查询数据较慢,查询时间大概在 60s 之内。客户端访问 Jsp 页面,然后 服务器 在数据库 进行查询,查询之后,返回一个 Json 字符串。 我做了一个模拟测试,在测试中,暂停该访问线程,我暂停 30s(内) requestInterface2.jsp 代码:Thread.sleep(29000);String result = "{"status":"0","msg":" 查询成功!","cname":"张三"}";out.print(result); 返回:org.apache.catalina.connector.RequestFacade@9bc36d[INFO] [2012-05-29 20:42:36] [org.apache.jsp.interface_.requestInterface2_jsp] # 获得客户端请求的URI:/jiaofei/interface/requestInterface2.jsp[INFO] [2012-05-29 20:42:36] [org.apache.jsp.interface_.requestInterface2_jsp] # 获得客户端请求的服务器的IP地址:192.168.1.192[INFO] [2012-05-29 20:42:36] [org.apache.jsp.interface_.requestInterface2_jsp] # 获得客户端的IP地址:192.168.1.101[INFO] [2012-05-29 20:42:36] [org.apache.jsp.interface_.requestInterface2_jsp] # {"status":"0","msg":" 查询成功!","cname":"张三"}   暂停该访问线程,我暂停 30s(之后)  Thread.sleep(31000);String result = "{"status":"0","msg":" 查询成功!","cname":"张三"}";out.print(result);  org.apache.catalina.connector.RequestFacade@15c4ee6org.apache.catalina.connector.RequestFacade@612ef6[INFO] [2012-05-29 20:40:21] [org.apache.jsp.interface_.requestInterface2_jsp] # 获得客户端请求的URI:/jiaofei/interface/requestInterface2.jsp[INFO] [2012-05-29 20:40:21] [org.apache.jsp.interface_.requestInterface2_jsp] # 获得客户端请求的服务器的IP地址:192.168.1.192[INFO] [2012-05-29 20:40:21] [org.apache.jsp.interface_.requestInterface2_jsp] # 获得客户端的IP地址:192.168.1.101[INFO] [2012-05-29 20:40:21] [org.apache.jsp.interface_.requestInterface2_jsp] # {"status":"0","msg":"查询成功!","cname":"张三"}[INFO] [2012-05-29 20:40:51] [org.apache.jsp.interface_.requestInterface2_jsp] # 获得客户端请求的URI:/jiaofei/interface/requestInterface2.jsp[INFO] [2012-05-29 20:40:51] [org.apache.jsp.interface_.requestInterface2_jsp] # 获得客户端请求的服务器的IP地址:192.168.1.192[INFO] [2012-05-29 20:40:51] [org.apache.jsp.interface_.requestInterface2_jsp] # 获得客户端的IP地址:192.168.1.101[INFO] [2012-05-29 20:40:51] [org.apache.jsp.interface_.requestInterface2_jsp] # {"status":"0","msg":"查询成功!","cname":"张三"} 亮点来了,注意,输出了两次 reqeust 内存地址,表示请求了两次 request,输出了两次请求的结果.  我碰到的问题:1.为什么会客户端会发起 两次请求?   |-- 客户端采用 jqeury ajax 请求此方法只调用了1次,没有调用第二次。function loadJson(){  var varRequestURL = "interface/requestInterface2.jsp";  $.post(varRequestURL,function(data){      alert(data);  });}2.为什么请求之后,服务器返回了结果,而客户端没有接收到返回值?后台请求了之后,jqeury ajax 里,一直没有返回值。调用 $.post 方法失败于是使用 jqeury ajax 完整版:$.ajax({   url: varRequestURL,          type: 'GET',      timeout: 120000,       error: function (XMLHttpRequest, textStatus, errorThrown)  {          alert('请求失败');            alert(XMLHttpRequest);            alert(textStatus);            alert(errorThrown);            },success: function(data){            alert("回调了");            alert(data);         }        });超时之后,自动提示出 "请求失败"。于是,判断 可能 jquery 有问题,于是不使用 jqeury 库,使用  javascript 的 ajaxfunction createXmlHttp(){        if (window.ActiveXObject) {            try {                return new ActiveXObject("Msxml2.XMLHTTP");            } catch (e) {                try {                    return new ActiveXObject("Microsoft.XMLHTTP");                } catch (e) {}            }    }    if (window.XMLHttpRequest) {        return new XMLHttpRequest();    }    return null;}var varRequest ;function ajaxSubmit(url){    alert('ajaxSubmit');    varRequest = createXmlHttp();    varRequest.open('GET',url,true);    varRequest.onreadystatechange=ajaxCallback;    varRequest.send(null);}function ajaxCallback(){   if(varRequest.readyState ==1){           }else if(varRequest.readyState==4){        if(varRequest.status=200){           try{            var data = varRequest.responseText;            alert(data);           }catch(err){           alert(err);           }        }    }}使用结果和使用 jqeury 代码 结果一样。  实在找不出问题所在,求大神解答!!! 另,Tomcat(6) 服务器 在 <Connector connectionTimeout="120000" > 我也已经配置。

解决方案

为什么会客户端会发起 两次请求?这个问题是应该是filter判断的时候出现的,这里并不是两次请求doFilter(req,res,chain)这个方法在过滤时,一去一回,所有出现的两次第二个,服务器肯定是会发送的,但是客户端收不到,说明连接丢了需要使用长连接,并制定连接时间,tomcat是设置下面的这个maxKeepAliveRequests
解决方案二:
光看服务器日志并不能保证客户端是正确调用了。最好还是用工具监视一下IE用fiddle2, firefox用firebug, chrome按f12键开监控看网络部分。这个是分析ajax调用行为的好方法。同时,也可以观察服务器返回的内容。

时间: 2024-09-11 15:03:02

【辨别】真心求辨别,是客户端问题,还是服务端问题?的相关文章

udp-UDP跨路由器通信,客户端无法收到服务端发送的UDP包

问题描述 UDP跨路由器通信,客户端无法收到服务端发送的UDP包 本人新手,正做一个UDP跨路由通信项目,遇如下问题:服务端(192.168.0.85)与路由器在同一网段,客户端(192.168.1.103)在该路由器组成的局域网内,现服务端可以接收到客户端发送的UDP包,但客户端无法收到服务端的UDP包.请问客户端发送的UDP包需怎样设置(IP/端口)?(PS:服务端与客服端在同一局域网内是可以UDP通信的) 以下是我的UDP设置客户端--目标IP:192.168.0.85----目标端口10

winform-Winform客户端和Android客户端同时使用一个服务端,后端(C#)采用什么技术实现?

问题描述 Winform客户端和Android客户端同时使用一个服务端,后端(C#)采用什么技术实现? asp.net Webapi作为Android服务端(个人想法),Winform使用什么服务端呢?如果要求数据同步,使用观察者模式?使用的协议也是个问题.求大神指点! 解决方案 web API都可以,只要你 的服务器是什么平台就选对应的,比如windows就用C#等开发web API这样各种客户端都可以访问 解决方案二: 考虑到android调用的方便,建议直接用asp.net mvc返回js

android客户端和js服务端RSA加密解密

问题描述 android客户端和js服务端RSA加密解密 android客户端利用js服务端的公钥加密数据再发给js服务端解密,可是js客户端总返回给我解密失败,找不到问题在哪,求大神指教!!!

wcf-WCF,客户端上传图片到服务端,然后再存放到数据库中的image字段中。

问题描述 WCF,客户端上传图片到服务端,然后再存放到数据库中的image字段中. WCF的问题.我现在在需要上传相片到数据库中存储,数据库中想用image数据类型来存储,不是用相片的路径.功能要求是在客户端首先将图片显示在PictuerBox中,然后点击上传.上传成功后需要从数据库中把相片取出来显示在PictuerBox).求案例 解决方案 http://blog.sina.com.cn/s/blog_a339e95f0101aakx.html 传输,直接传字节数组就可以了. 解决方案二: h

android-关于socket编程 客户端不能接受服务端信息问题

问题描述 关于socket编程 客户端不能接受服务端信息问题 private void send() { try { tvGetContent.append("我说:" + etSendContent.getText().toString() + "n"); writer.write(etSendContent.getText().toString() + "n"); writer.flush(); etSendContent.setText(&

soket客户端如何获得服务端的ip,然后再根据ip地址连接?

问题描述 soket客户端如何获得服务端的ip,然后再根据ip地址连接? 解决方案 解决方案二:局域网就发广播咯,广域网就只有用域名了

asifromdatarequest-iOS客户端向C#服务端post数据问题

问题描述 iOS客户端向C#服务端post数据问题 C#服务端要求接收的数据包格式为UInt16类型的2位,UInt32类型的4位,String类型的8位,Byte类型的1位... 目前我用NSMutableData组成请求数据包发送给C#服务端,但是返回结果错误提示,高手赐教下,这种post请求要如何发送呢? 我现在是用ASIHTTPRequest进行post. 问题应该出在组装请求数据这里. 我目前是这样组装的: NSMutableData *dt = [[NSMutableData all

android客户端怎么处理服务端发过来的日期格式

问题描述 android客户端怎么处理服务端发过来的日期格式 接收到的服务端数据 { "examDate": { "date": 20, "day": 5, "hours": 0, "minutes": 0, "month": 2, "nanos": 0, "seconds": 0, "time": 1426780800000,

代码-跪求用 openssl 密钥 写的服务端程序。

问题描述 跪求用 openssl 密钥 写的服务端程序. 着急啊, 如题,用openssl 生成密钥后,如何用到web 程序中?写一个服务端的代码.小弟在这里谢谢了. 解决方案 ssl_accept ssl_read ssl_wrirte 解决方案二: http://download.csdn.net/download/jiayanhui2877/4089505http://download.csdn.net/detail/zqlong_sunday/2311775http://download

运维-使用bacula服务器备份,客户端在win,服务端为linux,备份失败的问题

问题描述 使用bacula服务器备份,客户端在win,服务端为linux,备份失败的问题 06-7月 19:29 saas-dir JobId 101: Start Backup JobId 101, Job=FullBackup.2015-07-06_19.29.16_24 06-7月 19:29 saas-dir JobId 101: Using Device "FileStorage" to write. 06-7月 19:19 saas-fd JobId 101: Warnin