Nano Hash - криптовалюты, майнинг, программирование

Клиент SSE перестает работать каждый раз, когда я изменяю сервер (событие, отправленное сервером)

У меня есть очень простой SSE (событие, отправленное сервером Html5) с Java, используемой на стороне сервера. Я включил и клиент, и сервер ниже. Проблема в том, что если я изменю серверную сторону, даже простое изменение, такое как изменение текста в выводе отладки, которое не имеет ничего общего с фактическим текстом, отправленным на сервер, клиент перестанет публиковать полученные сообщения. На основе выходного сообщения, распечатываемого на стороне сервера, и трафика запросов, который я вижу как в Firebug, так и в инструменте разработчика Chrome, я вижу, что сервер отправляет сообщения, а браузер получает сообщение. Единственная проблема заключается в том, что функция JavaScript, которая должна запускаться при получении SSE, не запускается. Любое предложение, или вы видите что-то не так с моим кодом?

<!DOCTYPE html>
<html>
<body>
<h1>Getting server updates</h1>
<div id="result"></div>

<script>
    if(typeof(EventSource)!=="undefined")
    {
      var source=new EventSource("/ServerSideForSSE/sse3");
      source.onmessage=function(event)
      {
            document.getElementById("result").innerHTML+=event.data + "<br>";
      };
    }
    else
    {
      document.getElementById("result").innerHTML= 
"Sorry, your browser does not support server-sent events...";
    }
</script>

</body>
</html>

package com.ultratech;

import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


@WebServlet("/sse3")
public class sse3 extends HttpServlet {
    private static final long serialVersionUID = 1L;


    protected void doGet(HttpServletRequest request, 
                HttpServletResponse response) 
            throws ServletException, IOException 
    {

        response.setCharacterEncoding("utf-8");
        response.setContentType("text/event-stream");  


          PrintWriter out = response.getWriter(); 
          int x = 0;
          while (x < 100) 
          {
              x++;
              Date currentTime_1 = new Date();        
              out.println("Current Time is: " + currentTime_1);     
              out.println();  
              out.flush();
              System.out.println("Another message sent to the cleint ...");
              if (x > 100) {System.exit(0);}
              try {
                Thread.sleep(5 * 1000);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
          }//End of for().        
          out.close();                  
    }//End of doGet().

}

Ответы:


1

Каждое сообщение, которое вы отправляете, ДОЛЖНО начинаться со строки «data:» (не включая кавычки) и должно сопровождаться пустой строкой.

Если вы не будете следовать этому синтаксису, то клиент не будет рассматривать то, что вы отправляете, как сообщение, и поэтому функция не запускается.

27.05.2013
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..