@artemfisher

Почему SseEmitter шлет сообщения по кругу?

Никак не могу решить проблему. Каждый раз вызывается метод getCatalogs() с клиента.
Также интересно, что данные, которые должны передаваться по одному, передаются разом.
Т.е. сразу на клиент приходит 4 строки из цикла и строка, которая идет после цикла.

В логах сервера и в браузере показывает что постоянно происходит вызов метода getCatalogs().

@GetMapping("/getcatalogs")
	public SseEmitter getCatalogs() throws IOException
	{
		String url="https://market.yandex.ru/catalog--elektronika/61590?hid=198119";		
						
		Document document = Jsoup.connect(url).get();
		Elements elements = document.select(".egKyN._2jA_3._3a7xr");		
		
		List<Element> elems = elements.stream().toList();
		
		if(elems.size()>4)
			elems=elems.subList(0, 4);
		
		final List<Element> elems2 = elems;
		
		logger.info("elems2:"+elems2.size());
		
		ExecutorService executor = Executors.newCachedThreadPool();
		
		SseEmitter emitter = new SseEmitter();
		
		executor.execute(()->
		{		
			try
			{
				for(Element el:elems2)
				{
					String s = el.text()+" - "+el.attr("href");		
					emitter.send(s);
				}
				
				emitter.send("The parsing of the catalogs list is completed ");
			}
			catch(IOException ex)
			{
				emitter.completeWithError(ex);
			}
			finally
			{				
				emitter.complete();
			}	
		});	
		
		return emitter;		
	}


<script>
$('#parser_start').on('click', function() {	
	
	$(this).prop("disabled", true);
	url =  $('#catalog_url').val();
	//url="/SpringMvc/parser/getcatalogs";
	var sse = new EventSource(url);
	sse.onmessage = function (evt) {
	    var el = document.getElementById('result');
	    el.appendChild(document.createTextNode(evt.data));
	    el.appendChild(document.createElement('br'));	    
	};
	
	
});
</script>
  • Вопрос задан
  • 58 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы