我正在使用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()
函数返回逗号分隔的字符串。
我的客户端收到字符串(以逗号分隔的字符串)并继续调用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也不会被调用。
相同的行为反映在不同的浏览器中。我在glassfish server 4.0
中使用Netbeans 7.4 j2ee
。
同样在刷新后我在控制台中收到此错误: 1}}的连接在页面加载时被中断。