websocket 连接初始化时 sockjs报错。
websocket 创建连接的时候有时候能成功,有时候报错。
前台报错:
Uncaught Error: Incompatibile SockJS! Main site uses: "1.1.1", the iframe: "1.0.0".
后台也报错:
Caused by: java.io.IOException: Broken pipe
at sun.nio.ch.FileDispatcherImpl.write0(Native Method)
at sun.nio.ch.SocketDispatcher.write(SocketDispatcher.java:47)
at sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.java:93)
at sun.nio.ch.IOUtil.write(IOUtil.java:65)
at sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:487)
at org.apache.tomcat.util.net.NioChannel.write(NioChannel.java:124)
at org.apache.tomcat.util.net.NioBlockingSelector.write(NioBlockingSelector.java:101)
at org.apache.tomcat.util.net.NioSelectorPool.write(NioSelectorPool.java:172)
at org.apache.coyote.http11.InternalNioOutputBuffer.writeToSocket(InternalNioOutputBuffer.java:139)
at org.apache.coyote.http11.InternalNioOutputBuffer.addToBB(InternalNioOutputBuffer.java:197)
at org.apache.coyote.http11.InternalNioOutputBuffer.access$000(InternalNioOutputBuffer.java:41)
at org.apache.coyote.http11.InternalNioOutputBuffer$SocketOutputBuffer.doWrite(InternalNioOutputBuffer.java:320)
at org.apache.coyote.http11.filters.ChunkedOutputFilter.doWrite(ChunkedOutputFilter.java:118)
at org.apache.coyote.http11.AbstractOutputBuffer.doWrite(AbstractOutputBuffer.java:256)
at org.apache.coyote.Response.doWrite(Response.java:491)
at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:391)
... 21 more
前端代码:
function connect() {
console.log("Connection status1 "+socket.readyState);
stompClient = Stomp.over(socket);
stompClient.connect({}, function (frame) {
console.log(frame);;
getParkStatus();
stompClient.subscribe('/topic/parkPlaceMonitor', function (feedback) {});
});
}
$(function () {
connect();
});
补充一个奇怪的地方,在connect()方法后调用一个alert("")方法以后这个问题就不会出现了。以前没怎么做过前端,还望有经验的朋友指导一下,谢谢!
环境:
sockjs 1.1.1
stomp 1.1
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
换了sockjs 0.3.4之后这个报错确实没有了,但是有了新的问题。
你的服务端是否是亚马逊的Elastic Load Balancing? 如果是的话,服务端是不支持websocket协议的,必须开启底层的TCP通道。
具体教程可以参考:http://blog.flux7.com/web-app...
<script src="https://cdn.bootcss.com/sockj...;></script>
把导入的sockjs的版本从1.1.1改为1.0.0就可以了
请问怎么解决的呢?