导致ajax调用延迟的原因是什么?
What could be the cause of my ajax call being delayed?
我正在为一个网站提供通知服务。我希望能够实时接收通知,所以我使用Java asynresponse来实现这一点。我遇到了一个问题,在某些情况下,ajax调用的后端直到调用后20秒才运行。为了测试它,我启动了3个页面,然后尝试添加一个新的通知。如果等待的时间足够长,就不会有问题,但如果不等待,就不会更新每个页面,因为不是每个页面都在轮询。是我做错了什么导致了这个问题,还是我可以做些什么来确定是什么导致了这个问题?谢谢!
Java代码:@Path("/demo0825/notifications")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public class NotificationsResource {
@Singleton
@Startup
public static class Storage{
public static ArrayList<AsyncResponse> arList = new ArrayList<>();
private static final Object lock = new Object();
}
@GET
@Path("/poll")
public void pollNotifications(@Suspended AsyncResponse ar){
Date dateobj = new Date();
synchronized (Storage.lock) {
Storage.arList.add(ar);
}
}
@POST
public final Response addNotification(Notification pData) throws Exception {
try (NotificationDataAccess dataAccess = new NotificationDataAccess()) {
dataAccess.add(pData);
synchronized (Storage.lock) {
for (AsyncResponse ar : Storage.arList) {
ar.resume(pData);
}
Storage.arList.clear();
}
return Response.ok().build();
}
}
Javascript代码:
pollNotifications = function(){
console.log("here");
$.ajax({
url: "/atrt_ent/rest/demo0825/notifications/poll",
contentType: 'application/json',
type: "GET",
success: function(data){
console.log(data);
...
}
},
complete: function(){
console.log("here");
pollNotifications();
}
});
}
pollNotifications();
我使用chrome并显示时间戳,以便在ajax被调用时第一个console.log("here")
日志,然后我可以看到java代码中带有调试语句的日期。我也在没有锁的情况下这样做了,并得到了相同的结果。
对象锁是一个static
对象。因此,在pollNotifications
中使用它会影响addNotification
。arList ArrayList
仅在synchronized
块内使用。
我建议你使用Collections.synchronizedList
而不是ArrayList本身。这应该没问题:public static List<AsyncResponse> arList = Collections.synchronizedList(new ArrayList<AsyncResponse>());
现在,您可以删除同步块和锁对象本身,因为JVM控制对象同步。
相关文章:
- 使用AJAX在Rails中提交动态表单的最佳方式是什么
- 不确定我在PHP AJAX中使用的是什么开发模式
- 使用node.js发送并发ajax请求的限制是什么
- 如果我返回表,检查 Ajax 调用是否为 200 OK的最佳方法是什么
- 带有前导散列字符的ajax提交的目的是什么
- 当我想发布一个变量但有 1 个 js 时,ajax post 的解决方案是什么
- 让 jquery 为 ajax 添加的元素工作的最佳方法是什么?
- Chrome应用程序中AJAX请求的限制是什么
- AngularJS中使用ajax获取数据的最佳方式是什么
- AJAX的最佳实践是什么
- Jquery:是什么HTML元素启动了ajax
- jQuery ajax 调用 - jim 脚本响应应该是什么格式
- 什么是Javascript/AJAX时代
- 处理从 PHP JavaScript (AJAX) 返回的数据的最正确/最友好的方法是什么?
- jQuery.ajax认为是什么响应;成功”;
- 使用JavaScript,PHP Ajax和Zend框架创建响应式网站的标准方法是什么?
- /r/ 在这个 ajax url 调用中是什么意思
- 最好的1-1聊天模式是什么?(AJAX/CI/JQ)
- 堆栈溢出背后的算法是什么? ajax标记搜索字段
- jQuery'相当于javascript'的传输是什么?Ajax请求中的responseText