Jetty Websocket - sendString() 触发 onClose(错误 1006 - Websocket 读取 EOF)

Jetty Websocket - sendString() triggers onClose (Error 1006 - Websocket Read EOF)

每次我的 WebSocket 向我的客户端发送消息时,客户端都会调用连接的 onClose 函数并且没有收到消息。

错误为 1006 - Websocket 读取 EOF

我知道这个答案 getting the reason why websockets closed ,所以错误是由浏览器在本地引起的,但我使用的是 Firefox(最新)并且 html 和 javascript 代码没什么特别的。

直到服务器调用 session.getRemote().sendString 或 sendStringByFuture 客户端似乎已连接。 当调用 sendString(message) 时,总是触发 ws.onclose!


服务器端:

我的 Websocket.war 在带有模块部署、http、jsp、客户端和 websocket 的码头服务器上运行,在我看来连接已成功建立。 (查看日志)

我拿了official jetty-websocket example。 我删除了 Main.java,因为我使用 import javax.servlet.annotation.WebServlet;

映射 websocket-server
import javax.servlet.annotation.WebServlet;
import org.eclipse.jetty.websocket.servlet.WebSocketServlet;
import org.eclipse.jetty.websocket.servlet.WebSocketServletFactory;

@SuppressWarnings("serial")
@WebServlet(value="/start", asyncSupported = true)
public class WebServerTest extends WebSocketServlet{

    @Override
    public void configure(WebSocketServletFactory factory) {
        factory.register(WebSocketTest.class);
    }
}

码头服务器日志:

WebSocket Connect: WebSocketSession[websocket=JettyAnnotatedEventDriver[org.el.WebSocketTest@e0bb5f],behavior=SERVER,connection=WebSocketServerConnection@4a0644db[ios=IOState@3986db[CONNECTED,!in,out],f=Flusher[queueSize=0,aggregateSize=0,failure=null],g=Generator[SERVER,validating,+rsv1],p=Parser@11f79d8[ExtensionStack,s=START,c=0,len=0,f=null]]<-SocketChannelEndPoint@694908{/myIP:somePort<->/myIP:8080,OPEN,fill=-,flush=-,to=0/300000}{io=0/0,kio=0,kro=1}->WebSocketServerConnection@4a0644db[ios=IOState@3986db[CONNECTED,!in,out],f=Flusher[queueSize=0,aggregateSize=0,failure=null],g=Generator[SERVER,validating,+rsv1],p=Parser@11f79d8[ExtensionStack,s=START,c=0,len=0,f=null]],remote=WebSocketRemoteEndpoint@1a29617[batching=true],incoming=JettyAnnotatedEventDriver[org.el.WebSocketTest@e0bb5f],outgoing=ExtensionStack[queueSize=0,extensions=[permessage-deflate],incoming=org.eclipse.jetty.websocket.common.extensions.compress.PerMessageDeflateExtension,outgoing=org.eclipse.jetty.websocket.common.extensions.compress.PerMessageDeflateExtension]]

当我尝试从服务器向客户端发送应答时

Echoing back text message [start]
INFO:oe.WebSocketTest:qtp8420901-11: WebSocket Close: 1006 - WebSocket Read EOF

客户端:

Firefox 可以建立到 "ws://myIP:8080/Websocket/start" 的连接并收到 ws.onopen。

example.js

try {
    var ws = new WebSocket("ws://myIP:8080/Websocket/start");
} catch(Exception){ altert("Help"); }

ws.onopen = function () {
    appendLog("Connected to socket service!");
};

ws.onmessage = function (evt) {
    appendLog(evt.data);
};

ws.onclose = function () {
    appendLog("Disconnected from stock service!");
};

ws.onerror = function (err) {
    console.log("ERROR!", err);
};

function appendLog(logText) {
    var log = document.getElementById("log");
    log.value = log.value + logText + "\n";
}

function sendToServer(msg) {
    ws.send(msg);
}

好的,经过几个小时的阅读和搜索,我终于发现了我的错误。

我正在使用 Windows,我的办公桌上预装了卡巴斯基,我的同事使用的是 Linux,没有防病毒软件。在他的浏览器中一切正常,在我的一个连接中,当尝试接收消息时立即关闭。

是我的 antivirus/firewall 阻塞了 http-websockets。

解决方案:我现在使用 https-websockets 和“wss://myIP:8443/mySite”及其工作美好的。 很好的教程也是this site here

只是不要使用端口 8080。如果使用,例如 8081,则不会出现此错误。