You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:11:10