【发布时间】:2012-04-22 04:50:30
【问题描述】:
我目前遇到了与 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 时打印“错误”。有任何想法吗?有人看到源代码有什么问题吗?
提前致谢。 奥古斯丁
【问题讨论】:
-
你确定你在XP上安装的Chrome版本和其他代码成功的版本是一样的吗?
-
如果删除
response.setContentType("text/event-stream");会发生什么?也许 XP 无法识别此内容类型? -
如果我删除它,我得到 EventSource 的响应具有不是“text/event-stream”的 MIME 类型(“text/html”)。中止连接。
标签: java javascript html spring-mvc