Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/427.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 刷新后未定义Websocket evnt.data_Java_Javascript_Websocket_Refresh_Undefined - Fatal编程技术网

Java 刷新后未定义Websocket evnt.data

Java 刷新后未定义Websocket evnt.data,java,javascript,websocket,refresh,undefined,Java,Javascript,Websocket,Refresh,Undefined,我使用websocket显示来自服务器的实时消息更新 我的服务器代码段是: 我的服务器一直向我的客户端发送字符串,直到连接打开 @OnMessage public void onMessage(String message, @PathParam("client-id") String clientId) { for (Session client : clients) { while (client.isOpen()) { client.get

我使用websocket显示来自服务器的实时消息更新

我的服务器代码段是: 我的服务器一直向我的客户端发送字符串,直到连接打开

@OnMessage
public void onMessage(String message, @PathParam("client-id") String clientId) {

    for (Session client : clients) {
        while (client.isOpen()) {
            client.getAsyncRemote().sendObject(getStatus());

        }
    }

}

@OnClose
void onClose(Session peer) {
    System.out.println("Removed Peers");
    clients.remove(peer);
}
getStatus函数返回逗号分隔的字符串

我的客户机接收到stringcomma分隔字符串并不断调用setData,setData将html元素设置为该字符串的值

我的客户端代码是:

var websocket;
var rows;
var vM;
function connect() {

    if ($.browser.mozilla) {
        webSocket = new MozWebSocket(URL);
    } else {
        webSocket = new WebSocket(URL);
    }
    websocket.onopen = function(evnt) {
        onOpen(evnt);
    };
    websocket.onmessage = function(evnt) {
        onMessage(evnt);
    };
    websocket.onerror = function(evnt) {
        onError(evnt);
    };
    websocket.onclose = function() {
        console.log("Disconnected");
    };

    displayMigration();    

}

function onOpen(evnt) {

  setInterval(function() {
    if (websocket.bufferedAmount === 0) {      
        websocket.send("connect");
    }
 }, 600);

}
function onMessage(evnt) {

if (typeof evnt.data === "string") {
    setData(evnt);
    startDataUpdation();
    console.log(evnt.data);
   }
}
function onError(evnt) {
    alert('ERROR: ' + evnt.data);
}
}
现在,我的websocket会根据需要执行,直到我刷新屏幕为止。一旦我刷新它,evnt.data将未定义,因此即使连接已打开且readyState=1,也不会调用onMessage

相同的行为反映在不同的浏览器中。我在Netbeans 7.4 j2ee中使用glassfish服务器4.0

刷新后,我在控制台中也会出现以下错误:
加载页面时,与ws://localhost:8080/WebSocketWorking\u 2/websocket/client id的连接被中断。

为什么在for循环中有一段时间。这基本上会在客户端连接打开时保持循环,并且不会迭代到其他客户端,除非第一个客户端连接的当前连接关闭。getStatus函数每次返回不同的状态,因此字符串必须每次更新。因此我使用了while循环。