服务器返回 JSON,如下例,后面那个数字 9 表示的是页码,从 1 到 10000 都是存在数据的
curl -i http://localhost/data/9
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 220
[{"id":11,"version":0,"name":"my data"}]
用 curl 每次都能获取到这些数据,在浏览器(ubuntu 15.04默认源里最新版 firefox 和 chromium)里如果加上 console.log(data),这些数据也是每次都能取到
如果在浏览器里直接访问 http://localhost/data/9 这个 url,当改变页码时,有时能取到数据,有时就停留在加载中的状态,无法取到数据。
列举一下操作过程:
访问1:直接用浏览器访问 url,第 2 页取不到数据,只是加载中的状态
访问2:当清除缓存时再次访问,又取得到第 2 页的数据了
访问3:访问第 3 页,可以取到数据
访问4:再次用浏览器访问第 2 页,又是加载中的状态
访问5:用 curl 访问第 2 页,显示可以取到数据
服务器日志里显示根本就没有访问 4 的日志
如果修改页面的 js 代码,加上 console.log(data),重复上面的访问 1 到 5,都是能取到数据的。
请教这个现象可能是哪里出了问题?
服务器返回JSON,网页有时无法接收到
-
- 帖子: 135
- 注册时间: 2010-07-13 17:04
-
- 帖子: 14
- 注册时间: 2015-06-11 14:47
- 系统: Ubuntu14.04
Re: 服务器返回JSON,网页有时无法接收到
缺少抓包分析,应该在服务器端和客户端同时抓包,验证你的访问1和访问4两次是否有发送请求.
console.log只是显示浏览器的处理过程,浏览器是否有发送请求需要更进一步的验证.
我估计抓包是抓不到访问1和访问4的请求包的.所以关键在于你的页面代码.最好把页面发送请求这一段代码发上来,看看你的console.log(data)到请求提交之间是否还要可能出现异常的地方.
console.log只是显示浏览器的处理过程,浏览器是否有发送请求需要更进一步的验证.
我估计抓包是抓不到访问1和访问4的请求包的.所以关键在于你的页面代码.最好把页面发送请求这一段代码发上来,看看你的console.log(data)到请求提交之间是否还要可能出现异常的地方.
-
- 帖子: 135
- 注册时间: 2010-07-13 17:04
Re: 服务器返回JSON,网页有时无法接收到
谢谢关注。其实主楼的描述也是错的,如果把 curl -i 放进循环里,同样会卡在某个随机行而得不到数据。
在 chrome 里显示的是请求处于 pending 状态,服务器已经收到了这个请求,服务器日志里有这次请求的页码。但浏览器里没有收到数据,是直接返回 json 到网页,已经略去所有其它代码了。
如图,(_id 的规则是页码数加 1),服务器日志里已经打印了 114,就是被卡住的那个页码的请求,在网页里应该显示的 _id 是 115,但目前显示的是上次第 112 页的请求返回的 113。
在 chrome 里显示的是请求处于 pending 状态,服务器已经收到了这个请求,服务器日志里有这次请求的页码。但浏览器里没有收到数据,是直接返回 json 到网页,已经略去所有其它代码了。
如图,(_id 的规则是页码数加 1),服务器日志里已经打印了 114,就是被卡住的那个页码的请求,在网页里应该显示的 _id 是 115,但目前显示的是上次第 112 页的请求返回的 113。
-
- 帖子: 135
- 注册时间: 2010-07-13 17:04
Re: 服务器返回JSON,网页有时无法接收到
用了 wireshark,但我不懂这些,看着像是图中那些红色的有问题。
图中有三条浅绿色的,前两个是正常的,就是访问 /article/1 时能正确返回,第三个是浏览器地址栏里请求了 /article/4,但无法看到返回结果的。
再描述一下我的环境:virtualbox 4.3.28 中安装的 xubuntu 15.04,后来又安装了 fedora 22,仍然是同样的问题,两个系统都是 64 位的,用作 web 的服务器是 java 的,jdk 用的是 openjdk version "1.8.0_45-internal"。
但我将服务端换到 windows 7 时却是正常的。
请求大家指点一下可能的问题,以及如何修复。
图中有三条浅绿色的,前两个是正常的,就是访问 /article/1 时能正确返回,第三个是浏览器地址栏里请求了 /article/4,但无法看到返回结果的。
再描述一下我的环境:virtualbox 4.3.28 中安装的 xubuntu 15.04,后来又安装了 fedora 22,仍然是同样的问题,两个系统都是 64 位的,用作 web 的服务器是 java 的,jdk 用的是 openjdk version "1.8.0_45-internal"。
但我将服务端换到 windows 7 时却是正常的。
请求大家指点一下可能的问题,以及如何修复。
- oneleaf
- 论坛管理员
- 帖子: 10441
- 注册时间: 2005-03-27 0:06
- 系统: Ubuntu 12.04
Re: 服务器返回JSON,网页有时无法接收到
服务器的并发数不够吧,由于客户端采用了 Keep-Alive 维持长连接,导致服务端的并发全部占满了。可以禁止客户端的Keep-Alive,或服务端的并发数增加。
-
- 帖子: 135
- 注册时间: 2010-07-13 17:04
Re: 服务器返回JSON,网页有时无法接收到
ulimit 设置过了。Keep-Alive 在浏览器和服务器端都关掉了,仍然是同样的现象,如下图。
在服务器端可以看到 /article/4 这个请求的数据,mongodb 查询时也返回了数据,在服务器日志里都看得到,最后只是用了 response 写出一下。
在服务器端可以看到 /article/4 这个请求的数据,mongodb 查询时也返回了数据,在服务器日志里都看得到,最后只是用了 response 写出一下。
- oneleaf
- 论坛管理员
- 帖子: 10441
- 注册时间: 2005-03-27 0:06
- 系统: Ubuntu 12.04
Re: 服务器返回JSON,网页有时无法接收到
和 ulimit 无关,你服务端是用什么写的?包括整个架构使用什么软件搭建的?用ab做个压力测试试试。
-
- 帖子: 135
- 注册时间: 2010-07-13 17:04
Re: 服务器返回JSON,网页有时无法接收到
我觉得应该不是并发之类的,因为只用了浏览器一个一个地输入 url,就一个客户端请求而已,中间也等了很长时间才输入第二个 url。
服务器只是普通的 servlet。
现在我怀疑是 virtualbox 的问题,我在实体机里测试就没有这些问题出现,实体机目前在用 windows 7,稍后准备找台 ubuntu 试试。而在 virtualbox 里不管是 xubuntu 还是 fedora,都是同样的现象。不过这个怀疑没什么根据,以前都是在 virtualbox 里部署的,也没出过问题。
服务器只是普通的 servlet。
现在我怀疑是 virtualbox 的问题,我在实体机里测试就没有这些问题出现,实体机目前在用 windows 7,稍后准备找台 ubuntu 试试。而在 virtualbox 里不管是 xubuntu 还是 fedora,都是同样的现象。不过这个怀疑没什么根据,以前都是在 virtualbox 里部署的,也没出过问题。