我有一個使用Spring Framework的Java Web服務器,我想使用Server Sent Events在每秒向Web客戶端發送通知。在Java Web服務器上發送服務器事件
我的控制器,用於這些通知看起來像這樣:
@Controller
public class NotificationController {
private static final String REST_PREFIX = "/rest/notifications";
@RequestMapping(value = {REST_PREFIX}, method = {RequestMethod.GET})
synchronized public void getMonitoringNotifications(HttpServletRequest request, HttpServletResponse response) {
response.setContentType("text/event-stream;charset=UTF-8");
response.setHeader("Cache-Control", "no-cache");
response.setHeader("Connection", "keep-alive");
try {
PrintWriter out = response.getWriter();
int i = 0;
while (true) {
out.print("id: " + "ServerTime" + "\n");
out.print("data: " + (i++) + "\n\n");
out.flush();
Thread.currentThread().sleep(1000);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
我的問題是,代替1秒後接收每個通知,客戶端等待要被髮送的所有通知。 如果我嘗試發送一些通知,比如30,在客戶端我會在最後收到它們。
我的客戶是一個簡單的,因爲它只監聽特定端點接收通知:
<!DOCTYPE html>
<html>
<body>
<h1>Notification received : </h1>
<div id="ServerTime"></div>
<script>
if (typeof (EventSource) !== "undefined") {
var source = new EventSource("https://10.241.53.185/rest/notifications");
source.addEventListener('message', function(event) {
console.log(event.data);
});
} else {
document.getElementById("ServerTime").innerHTML = "Working, processing, getting info....";
}
</script>
</body>
</html>
能否請你幫我這個問題?
謝謝
這顯然不是向客戶端發送信息的方式。作爲結果,使用'SseEmitter'或'StreamingResponseBody'。 –
感謝您的信息。我還發現我的代碼存在問題,因爲我需要在不同的線程中寫入打印機。 – Ancuta