В моем приложении у меня есть поле «Последнее доступное время» в заголовке, которое обновляется каждые 5 секунд. Я включил header.jsp в другие jsps. [link1.jsp и link2.jsp.Refer screen shot.] Теперь при загрузке я запускаю запрос на сервер, и запрос приостанавливается. // ссылаемся на прикрепленный файл .js и .java-файл Он отлично работает. Я получаю ответ от сервера каждые 5 секунд. Теперь, когда я перехожу к другим jsps, перейдя по ссылке, страница перезагружается, т. Е. Заголовок header.jsp перезагружается. Даже сейчас, я получаю ответ от сервера, но вместо каждых 5 секунд, Я получаю ответ даже для запросов, которые были инициированы во время начальной загрузки страницы. Таким образом, он появляется, хотя поле обновляется каждые 2 секунды вместо фактического интервала в 5 секунд. Когда я продолжаю перемещаться вперед и назад, нажимая на ссылки, часы непрерывно гаснут, были запросы, которые срабатывали в течение различных интервалов.отписаться от подписки
Есть ли способ избежать этого?
Я намерен отменить все предыдущие запросы, когда снова загружу header.jsp. Я попытался отказаться от подписки() в сочетании с длительным опросом. Это не сработало.
Кроме того, я попытался использовать URL-адрес «/ stop» в соответствии с этим link И на его обратном вызове подумал об увольнении запроса, чтобы я мог каждый раз запускать запросы. Даже это не сработало. Вызов «/ stop» остановил запросы от увольнения. Обратный вызов никогда не вызывался.
Я не уверен, что здесь что-то не хватает.
Пожалуйста, помогите мне.
Спасибо.
код расслоение плотной
$("document").ready(function(){
fireRequest();
});
function fireRequest()
{
var socket = $.atmosphere;
var subSocket;
var websocketUrl = "atmos/time";
var request = {
url: websocketUrl,
contentType : "application/json",
logLevel : 'debug',
dataType: 'json',
shared:true,
transport : 'websocket' ,
trackMessageLength : true,
enableProtocol : true,
reconnectInterval : 0,
maxReconnectOnClose : 3,
dropAtmosphereHeaders : false,
timeout : 10 * 60 * 1000,
fallbackTransport: 'long-polling',
connectTimeout: -1
};
request.onMessage = function (response) {
try {
var data = response.responseBody;
$("#time").text(data);
}
catch(e)
{
console.log(e);
}
};
request.onOpen = function(response) {
console.log('onOpen '+ response);
};
request.onReconnect = function (request, response) {
console.log('onReconnect ' + request);
console.log('onReconnect ' + response);
};
request.onClose = function(response) {
if (response.state == "unsubscribe") {
alert('window switch');
}
console.log('onClose ' + response);
},
request.onError = function(response) {
console.log('onError ' + response);
};
subSocket = socket.subscribe(request);
}
AtmosphereResource.java
@Path("/{tagid}")
@Produces("text/html;charset=ISO-8859-1")
@Singleton
public class AtmosResource {
private static final Logger logger = LoggerFactory.getLogger(AtmosResource.class);
private final AsyncHttpClient asyncClient = new AsyncHttpClient();
private final ConcurrentHashMap<String, Future<?>> futures = new ConcurrentHashMap<String, Future<?>>();
private final CountDownLatch suspendLatch = new CountDownLatch(1);
private int count = 1;
@GET
public SuspendResponse<String> search(final @PathParam("tagid") Broadcaster feed,
final @PathParam("tagid") String tagid, final @Context AtmosphereResource resource) {
if (feed.getAtmosphereResources().size() == 0) {
final Future<?> future = feed.scheduleFixedBroadcast(new Callable<String>() {
public String call() throws Exception {
suspendLatch.await();
asyncClient.prepareGet("http://localhost:7070/sample/rest/currentTime").execute(
new AsyncCompletionHandler<Object>() {
@Override
public Object onCompleted(Response response) throws Exception {
String s = response.getResponseBody();
if (response.getStatusCode() != 200) {
feed.resumeAll();
feed.destroy();
return null;
}
feed.broadcast(s).get();
System.out.println("Current Count::: " + count);
count ++;
System.out.println("data:: " + new Date().toString());
return null;
}
});
return null;
}
}, 5, TimeUnit.SECONDS);
futures.put(tagid, future);
}
return new SuspendResponse.SuspendResponseBuilder<String>().broadcaster(feed).outputComments(true)
.addListener(new EventsLogger() {
@Override
public void onSuspend(
final AtmosphereResourceEvent event) {
super.onSuspend(event);
feed.addAtmosphereResource(resource);
suspendLatch.countDown();
}
// overriding this method to check when the user
//switches tabs/closes browser.
//ref: https://github.com/Atmosphere/atmosphere/wiki/Detecting-Browser-close%27s-situation-when-using-long-polling
@Override
public void onDisconnect(final AtmosphereResourceEvent event)
{
String transport = event.getResource().getRequest().getHeader(HeaderConfig.X_ATMOSPHERE_TRANSPORT);
if (transport != null && transport.equalsIgnoreCase(HeaderConfig.DISCONNECT)) {
System.out.println("DISCONNECT");
} else {
System.out.println("Long-Polling Connection resumed.");
}
}
}).build();
}
@GET
@Path("stop")
public String stopSearch(final @PathParam("tagid") Broadcaster feed,
final @PathParam("tagid") String tagid) {
feed.resumeAll();
if (futures.get(tagid) != null) {
futures.get(tagid).cancel(true);
}
logger.info("Stopping real time update for {}", tagid);
return "DONE";
}
}
Снимок экрана