当前位置: 首页 > 知识库问答 >
问题:

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

段干恺
2023-03-14

每次我的WebSocket向我的客户机发送消息时,客户机都会为连接调用onClose-function,而不会接收到消息。

错误为1006-Websocket读取EOF

我知道这个答案得到websockets关闭的原因,所以错误是由浏览器本地的,但我使用的是Firefox(最新的)和html和javascript代码没有什么特别的。

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

服务器端:

我的websocket.war运行在一个jetty-server上,带有模块deploy、http、jsp、客户端和websocket,我认为连接是成功的。(参见日志)

我以官方的jetty-websocket为例。我删除了main.java,因为我使用导入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);
}

共有1个答案

涂泰平
2023-03-14

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

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

是我的防病毒/防火墙阻止了HTTP-WebSockets。

 类似资料:
  • 我正在我的网络游戏中记录断开连接。似乎75%的会话使用代码1001断开连接(正常),25%的会话使用代码1006断开连接(错误)。https://www.rfc-editor.org/rfc/rfc6455 有时出于错误原因,我会看到以下文字: CloudFlare WebSocket代理重新启动 但他说,1006次断开中的大多数根本没有给出任何理由。球员们无缘无故地断绝了联系。这通常发生在玩家积

  • 我在WordPress数据库中编写了一个MySQL触发器&它给出了一个错误。我的触发器代码如下: 它会给出以下错误消息: 错误 SQL查询:文档 CREATE[DEFINER={user CURRENT_USER}]trigger up_trig AFTER INSERT ON每一行BEGIN DECLARE“选择DISTINCT()INTOFROM其中='panchayat_id'和=new。(

  • 问题内容: 好吧,我已经研究并没有找到以下问题的解决方法`’SQL Error (1442): Can not update table’ messages’ in stored function / trigger because it is already used by statement Which invoked this stored function / trigger.`` 我的触

  • void trigger_error(string error_msg, [int level]) This function can be used to output an error message using Smarty. level parameter can be one of the values used for trigger_error() PHP function, i.e

  • 我是一名铁锈新手,尝试阅读两个数字并计算它们的商: 但是当我试图编译它时,我得到了以下错误重复了几次: src/safe_div.rs:12: 12:12:21错误:不匹配类型:预期

  • 嗨,我正在将我的所有表从一个数据库导入到另一个数据库,但不知何故,触发器没有被导入。使用MySQL5.6。所以我试图从以前的数据库中复制触发器语句来创建当前数据库中的触发器。分隔符$$ 我在工作台的输出部分中得到的错误 知道我做错了什么吗