我目前遇到与 SSE 和 Windows XP 相关的问题。下面的源代码目前在我尝试过的所有 Chrome 中都可以使用,除了 Windows XP 中的 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 时打印“错误”。有任何想法吗?有人看到源代码有什么问题吗?
提前致谢。奥古斯丁