【发布时间】:2023-03-03 19:45:01
【问题描述】:
我是 web-socket 编程的新手...
我有以下 JavaScript 客户端代码:
var connection = new WebSocket('ws://localhost:8080/OmegaThings/registerdevice');
connection.onopen = function () {
console.log("Socket has been opened state = " + connection.readyState);
connection.send('Ping'); // Send the message 'Ping' to the server
connection.send('Websocket client');
};
console.log("Socket has been opened state = " + connection.readyState);
connection.send('finish');
// Log errors
connection.onerror = function (error) {
console.log('WebSocket Error ' + error);
};
// Log messages from the server
connection.onmessage = function (e) {
console.log('Server: ' + e.data);
};
Java 端点:
@ServerEndpoint("/registerdevice")
public class RegisterDeviceEndPoint
{
private static final Logger LOG = Logger.getLogger(RegisterDeviceEndPoint.class.getName());
@OnOpen
public void connectionOpened()
{
LOG.log(Level.INFO, "******************connection opened**************");
}
@OnMessage
public synchronized void processMessage(Session session, String message)
{
LOG.log(Level.INFO, "received message: {0}", message);
}
@OnClose
public void connectionClosed()
{
LOG.log(Level.INFO, "connection closed");
}
}
在 Firefox 控制台上,我得到以下输出:
"Socket has been opened state = 1"
InvalidStateError: An attempt was made to use an object that is not, or is no longer, usable
"Socket has been opened state = 0"
在 GlassFish 服务器日志上,我得到了“ping”和“Websocket 客户端”,但是在 onopen 事件退出后连接关闭(不确定),因此,最后一个单词“finish”没有出现在日志上并且错误发生。
我想知道我的代码是否正确?
是什么导致错误? javascript 代码、GlassFish 服务器配置还是 java 端点代码?
【问题讨论】:
-
我认为您刷新了可能会终止现有连接的页面。可能这个链接会帮助你stackoverflow.com/questions/21675247/…
标签: java javascript jakarta-ee websocket glassfish