WebSocket.onmessage未触发:Java服务端与JS客户端通信异常
问题排查与修复方案
我一眼就发现了两个关键问题,导致你的JS端onmessage事件没有触发:
1. 事件名拼写错误
你的JS代码里把onmessage写成了onmmessage(多了一个字母m),浏览器根本无法识别这个错误的事件名称,自然不会执行对应的回调逻辑。
2. 端口号不匹配
你的JS客户端连接的是ws://localhost:8000,但Java服务端监听的是9000端口。虽然你提到Java能收到"Hello",可能是测试时临时调整过其中一方的端口,但这个端口不一致的问题必须修正,否则后续通信肯定会出问题。
修正后的JS代码
window.websocket = new WebSocket("ws://localhost:9000"); // 改成和服务端一致的9000端口 window.websocket.onopen = () => { window.websocket.send("Hello") } window.websocket.onmessage = function(event) { // 修正拼写错误 alert('Hi'); console.log(event.data); } // 建议补充错误监听,方便排查后续问题 window.websocket.onerror = function(error) { console.error('WebSocket error:', error); } // 补充关闭事件监听,完善调试信息 window.websocket.onclose = function(event) { console.log('WebSocket closed:', event.code, event.reason); }
额外优化建议
在Java服务端的onClose方法里加上日志输出,方便跟踪连接状态:
@Override public void onClose(WebSocket conn, int code, String reason, boolean remote) { conns.remove(conn); System.out.println("Connection closed from " + conn.getRemoteSocketAddress().getAddress().getHostAddress() + " | Code: " + code + " | Reason: " + reason); }
修改完成后重新测试:客户端连接服务端后发送"Hello",服务端收到回复"hello",JS端应该就能正常弹出alert并在控制台打印回复内容了。
内容的提问来源于stack exchange,提问作者Flontis
相关产品推荐
相关产品推荐

