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

基于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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 17:25:51