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

JavaScript如何校验WebSocket接收消息并触发声音播放等操作

WebSocket排队叫号系统Client2消息触发提示音实现

核心逻辑

  • 预加载提示音避免播放卡顿
  • WebSocket消息回调里做严格字符串匹配,收到Hello From Client1!时播放提示音,其余消息走对应业务分支
  • 适配浏览器自动播放规则,解决无交互时音频被拦截的问题

可直接使用的Client2完整代码

<body>
    Client2
    <button onclick="sendMessage()">Send Msg</button>

    <script>
        // 替换成你自己的提示音文件路径
        const noticeSound = new Audio('./call_notice.mp3');
        let audioReady = false;

        // 处理浏览器自动播放限制:用户首次点击/触摸页面后解锁音频权限
        const unlockAudio = () => {
            if (audioReady) return;
            noticeSound.play().then(() => {
                noticeSound.pause();
                noticeSound.currentTime = 0;
                audioReady = true;
            }).catch(() => {});
            document.removeEventListener('click', unlockAudio);
            document.removeEventListener('touchstart', unlockAudio);
        }
        document.addEventListener('click', unlockAudio);
        document.addEventListener('touchstart', unlockAudio);

        // 建立WebSocket连接
        const socket = new WebSocket('ws://localhost:3000');

        socket.addEventListener('open', () => {
            console.log('Connected to WS Server');
        });

        // 消息监听逻辑
        socket.addEventListener('message', (event) => {
            const msg = event.data.trim();
            console.log('Message from server ', msg);

            // 匹配到Client1的叫号消息
            if (msg === 'Hello From Client1!') {
                // 重置播放进度,避免连续触发时不响
                noticeSound.currentTime = 0;
                noticeSound.play().catch(err => {
                    console.error('提示音播放失败:', err);
                });
                // 此处可追加叫号配套逻辑:弹窗提醒、更新当前叫号序号、高亮排队条目等
                return;
            }

            // 其余消息的处理逻辑写在这
            // 比如排队位次更新、服务端心跳响应、系统通知等
        });

        const sendMessage = () => {
            socket.send('Hello From Client2!');
        }
    </script>
</body>

补充说明

  • Client1原有代码不需要改动,保持现有逻辑即可
  • 提前确认WebSocket服务端已配置消息广播规则:单个客户端发送的消息会转发给所有其他在线客户端,否则跨客户端消息无法送达
  • 提示音建议用体积小于100KB的短mp3文件,放在站点同目录下避免跨域问题
  • 需要调整音量的话,初始化Audio后加一行noticeSound.volume = 0.8;即可,参数范围0到1

内容的提问来源于stack exchange,提问作者user3566133

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 00:09:20