Java 刷新后未定义Websocket evnt.data
我使用websocket显示来自服务器的实时消息更新 我的服务器代码段是: 我的服务器一直向我的客户端发送字符串,直到连接打开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
@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循环。