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

时间:2017-01-25 12:42:16

标签: websocket jetty embedded-jetty jetty-9

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

错误是1006 - Websocket Read 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);
    }
}

码头-SERVERLOG:

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);
}

2 个答案:

答案 0 :(得分:1)

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

我在我的工作台上使用预装了卡巴斯基的Windows,我的同事使用Linux而不使用防病毒软件。在他的浏览器中,一切正常,我的一个连接在尝试接收消息时立即关闭。

这是我的防病毒/防火墙阻止http-websockets。

解决方案:我现在正在使用“ wss:// myIP:8443 / mySite ”进行http s -websockets,并且工作正常。 一个好的教程也是this site here

答案 1 :(得分:0)

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