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

阅读 19k
4 个回答

换了sockjs 0.3.4之后这个报错确实没有了,但是有了新的问题。

WebSocket connection to 'ws://127.0.0.1:8080/pms/websocket/181/vledvxj1/websocket' failed: WebSocket is closed before the connection is established.

你的服务端是否是亚马逊的Elastic Load Balancing? 如果是的话,服务端是不支持websocket协议的,必须开启底层的TCP通道。

具体教程可以参考:http://blog.flux7.com/web-app...

clipboard.png

新手上路,请多包涵
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进