WebSocket(Sockjs和Stomp)与ServiceWorkers

时间:2016-01-25 20:03:34

标签: html5 websocket stomp sockjs service-worker

我正在使用Stomp和Sockjs在我的Spring Boot自包含服务器(3.1.1)中注册websocket,这一切都运行正常。但是,我已经实现了一个ServiceWorker来处理脱机服务,除套接字外,这些服务都可以正常工作。对ws:// localhost / registerSocket的调用会在前端产生此错误:

  

Firefox无法在ws:// localhost / registerSocket / 351 / 4vevdv79 / websocket建立与服务器的连接。

这是在后端:

  

ERROR o.s.w.s.s.s.DefaultHandshakeHandler - 由于升级标头无效而导致握手失败:null

在我的ServiceWorker中,我特意将其排除在拦截ws请求之外:

if (uri.indexOf("/registerSocket") === -1) {
   event.respondWith(getResponse(event));
}

然而,不可避免的是,升级失败了,它又回归到了旧的彗星风格的polyfill。

有人知道使用ServiceWorker使websockets正常工作的方法吗?

2 个答案:

答案 0 :(得分:2)

我刚刚发现Firefox 44中的一个错误,该错误阻止了使用Service Worker时Web Socket连接的工作。

请参阅this bug report

现在应该修复错误(因为Firefox 44.0.1;它甚至在release notes中)。

答案 1 :(得分:1)

服务工作者中的

fetch事件处理程序仅为triggered in response to HTTP requests。打开WebSocket或通过该WebSocket传输数据的请求不会触发fetch事件处理程序,这意味着服务工作者不会参与其中。