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

Jetty Websocket-sendString()触发onClose(错误1006-Websocket读取EOF),websocket,jetty,embedded-jetty,jetty-9,Websocket,Jetty,Embedded Jetty,Jetty 9,每次WebSocket向客户端发送消息时,客户端都会调用连接的onClose函数,但不会收到消息 错误为1006-Websocket读取EOF 我知道这个答案,所以错误是由浏览器在本地产生的,但我使用的是Firefox(最新版本),html和javascript代码并没有什么特别之处 直到服务器调用session.getRemote()。sendString或sendStringByFuture客户端似乎已连接。 调用sendString(message)时,总是会触发ws.onclose 服

每次WebSocket向客户端发送消息时,客户端都会调用连接的onClose函数,但不会收到消息

错误为1006-Websocket读取EOF

我知道这个答案,所以错误是由浏览器在本地产生的,但我使用的是Firefox(最新版本),html和javascript代码并没有什么特别之处

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


服务器端:

我的Websocket.war在jetty服务器上运行,带有模块部署、http、jsp、客户端和Websocket,我认为连接是成功的。(见日志)

我拿了那本书。 我删除了Main.java,因为我使用import javax.servlet.annotation.WebServlet映射websocket服务器

Jetty服务器日志:

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]]

客户端:

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,我的workdesk上预装了卡巴斯基,我的同事在使用Linux时没有防病毒软件。在他的浏览器中,一切正常,在我的浏览器中,当尝试接收消息时,连接立即关闭

是我的防病毒/防火墙阻止了http WebSocket。

解决方案:我现在使用https-websockets和“wss://myIP:8443/mySite“它工作得很好。
一个好的教程也是

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

Echoing back text message [start]
INFO:oe.WebSocketTest:qtp8420901-11: WebSocket Close: 1006 - WebSocket Read EOF
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);
}