基于AWS IVS的聊天应用WebSocket连接异常问题求助
问题分析与修复方案
错误1:WebSocket仍在CONNECTING状态就调用send
WebSocket连接是异步建立的,直接在创建连接后立即调用send会触发此错误。必须等待连接成功建立(onopen事件触发)后再发送消息。
错误2:WebSocket连接失败
核心原因是聊天Token无效,你的PHP代码存在语法错误,未正确调用AWS IVS Chat的createChatToken接口生成有效Token。
第一步:修复PHP生成Token的代码
原代码缺少createChatToken方法调用,且存在语法错误,修正后代码如下:
<?php include "./vendor/autoload.php"; $accessKey = "<你的AWS Access Key>"; $secretKey = "<你的AWS Secret Key>"; $region = "eu-west-1"; $roomId = "<你的IVS Chat房间ID>"; // 初始化IVS Chat客户端 $awsclient = new Aws\ivschat\ivschatClient([ 'version' => 'latest', 'region' => $region, 'credentials' => [ 'key' => $accessKey, 'secret' => $secretKey, ] ]); // 生成聊天Token,添加必要权限 $result = $awsclient->createChatToken([ 'roomIdentifier' => $roomId, 'userId' => '11111', 'capabilities' => ['SEND_MESSAGE', 'VIEW_MESSAGES'] // 至少需要这两个权限 ]); // 输出生成的Token,供前端使用 echo $result['token'];
运行该脚本,获取有效的聊天Token。
第二步:修复前端代码
修改前端代码,等待连接建立后再发送消息,并添加错误监听排查问题:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>IVS Chat Demo</title> </head> <body> <script> // 替换为PHP脚本生成的有效Token const chatClientToken = "<从PHP获取的Token>"; // IVS Chat仅支持wss协议,端点格式正确 const socket = "wss://edge.ivschat.eu-west-1.amazonaws.com"; const connection = new WebSocket(socket, chatClientToken); const payload = { "Action": "SEND_MESSAGE", "RequestId": "msg-001", "Content": "Hello IVS Chat!", "Attributes": { "CustomMetadata": "test metadata" } }; // 连接成功后再发送消息 connection.onopen = () => { console.log("连接成功,发送消息"); connection.send(JSON.stringify(payload)); }; // 接收消息 connection.onmessage = (event) => { const data = JSON.parse(event.data); displayMessages({ display_name: data.Sender?.Attributes?.DisplayName || '匿名用户', message: data.Content, timestamp: data.SendTime }); }; // 监听连接错误 connection.onerror = (err) => { console.error("连接错误:", err); }; // 监听连接关闭 connection.onclose = (event) => { console.log("连接关闭:", event.code, event.reason); }; function displayMessages(message) { console.log("收到消息:", message); } </script> </body> </html>
额外检查项
- 确保AWS账号拥有
ivschat:CreateChatToken权限 - 确认IVS Chat房间在
eu-west-1区域创建,与代码中的区域一致 - 禁止使用
ws协议,IVS Chat仅支持加密的wss协议
内容的提问来源于stack exchange,提问作者Kuti7
相关产品推荐
相关产品推荐

