現在、SSEとWindowsXPに関連する問題が発生しています。以下のソースコードは、Windows XPのChromeを除いて、私が試したすべてのChromeで現在機能しています(?)理由はわかりません。これは、ユーザーがChromeを使用する必要があるコントロールパネルで使用することを目的としています。つまり、IEやFirefoxなどは気にしません。
問題:サーバー側のイベントはどこでも機能しますが(Chrome)、Windows XPでは機能しません(Chrome)。私がそれが機能すると言うとき、私はメッセージハンドラーが呼び出されることを意味します。
コード
Javascriptコード
if (!!window.EventSource) { console.log("Event source available"); var source = new EventSource('/admin/systemalert'); source.addEventListener('message', function(e) { console.log(e.data); }); source.addEventListener('open', function(e) { console.log("Connection was opened."); }, false); source.addEventListener('error', function(e) { if (e.readyState == EventSource.CLOSED) { console.log("Connection was closed."); } else { console.log(e.readyState); <-- in windows XP it prints Error here } }, false); } else { console.log("No SSE available"); }
サーバー側のコード
@Controller @RequestMapping("/admin/**") public class AdminController { @RequestMapping("systemalert") public @ResponseBody String sendMessage(HttpServletResponse response) { Random r = new Random(); response.setContentType("text/event-stream"); try { Thread.sleep(10000); } catch (InterruptedException e) { e.printStackTrace(); } return "data:Testing 1,2,3" + r.nextInt() +"\n"; } }
コードで述べられているように、行console.log(e.readyState); Windows XPでChromeを使用すると、「エラー」が出力されます。何か案は?誰かがソースコードに何か問題があると思いますか?
前もって感謝します。アグスティン