Значение тайм -аута для Spring SseemitterJAVA

Программисты JAVA общаются здесь
Anonymous
Значение тайм -аута для Spring Sseemitter

Сообщение Anonymous »

Код: Выделить всё

 SseEmitter sseEmitter = new SseEmitter(30000L)< /code> < /p>

[*]  Указывает максимальное количество времени (в миллисекундах), что сервер может удерживать холостое время SSE. Если данные не отправляются клиенту в течение 30 секунд, сервер автоматически запускает Outtimeout и закроет соединение. 

  Как только будет установлено соединение SSE, оно будет закрыто через 30 секунд, независимо от того, был ли Sseemitter.send () 
. Тайм -аут означает 1 или 2? < /p>

Код: Выделить всё




SSE




let chat = document.getElementById("con");
if (window.EventSource) {
const eventSource = new EventSource('http://localhost:8080/peace/subscribe?uid=456');

eventSource.onopen = function () {
console.log('SSE seccuss');
};

eventSource.onmessage = function (event) {
console.log("message:", event.data);
};

eventSource.onerror = function (error) {
console.log('SSE error', error);
};
} else {
alert("你的浏览器不支持SSE");
}



< /code>
Это мой код Java : < /p>
public SseEmitter subscribe(String uid) {

SseEmitter sseEmitter = new SseEmitter(10000L);

sseEmitter.onCompletion(() -> {
sseEmitterMap.remove(uid);
});

sseEmitter.onTimeout(() -> {
System.out.println(Calendar.getInstance().getTime());
});

sseEmitter.onError(throwable -> {
try {
sseEmitter.send(SseEmitter.event().id(uid)
.name("has error!")
.data("has error!")
.reconnectTime(3000));
sseEmitterMap.put(uid, sseEmitter);
} catch (IOException e) {
e.printStackTrace();
}
});
sseEmitterMap.put(uid, sseEmitter);

return sseEmitter;
}

public boolean sseChat(String uid, String messageId, String message) {
SseEmitter sseEmitter = sseEmitterMap.get(uid);
if (sseEmitter == null) {
return false;
}
Executors.newSingleThreadScheduledExecutor().scheduleAtFixedRate(() -> {
try {
sseEmitter.send("Data at " + System.currentTimeMillis());
System.out.println("Data sent successfully");
} catch (IOException e) {
sseEmitter.completeWithError(e);
}
}, 0, 1, TimeUnit.SECONDS);
return true;
}
Я обнаружил, что, как только будет достигнут период времени, будет выведена ошибка:


Подробнее здесь: https://stackoverflow.com/questions/796 ... sseemitter

Вернуться в «JAVA»