如何在javax WebSocket连接建立时接收服务器发送的消息?
为什么你接收不到服务器发送的消息?
很遗憾,你当前的客户端代码无法接收到服务器在@OnOpen里发送的消息,问题出在对WebSocket事件的理解和使用上,下面给你详细解释并给出修复方案:
核心问题:用错了事件监听
客户端的ws.onopen事件仅用于通知你「WebSocket连接已成功建立」,这个事件的event对象里根本没有message或data属性——你拿到undefined就是因为这个原因。
服务器在@OnOpen方法中发送的文本消息,属于标准的WebSocket消息,这类消息只会触发客户端的onmessage事件,而非onopen。
修正后的客户端代码
你需要把接收消息的逻辑放到onmessage回调里,同时保留onopen用于连接成功的提示:
// 监听连接建立成功的事件 ws.onopen = function(event) { console.log("WebSocket连接已成功建立"); }; // 监听服务器发送的消息(包括@OnOpen里的初始化消息) ws.onmessage = function(event) { document.getElementById('messages').innerHTML = event.data; };
关于@OnError的补充说明
如果你的@OnError方法是想向客户端发送错误提示信息,同样需要通过Session.sendText()来发送,客户端还是要通过onmessage事件接收这条错误消息。
如果是WebSocket连接层面的错误(比如连接中断、协议错误),客户端可以监听ws.onerror事件,但这个事件的event对象也不会直接包含服务器主动发送的错误文本,主动发送的错误信息依然要靠onmessage来捕获。
内容的提问来源于stack exchange,提问作者Nesquik27
相关产品推荐
相关产品推荐

