亚马逊aws WebSocket api -禁止发送消息

ldioqlga  于 2022-11-29  发布在  其他
关注(0)|答案(6)|浏览(172)

我正在尝试为我的项目实现WebSocket,所以我在看这个教程https://aws.amazon.com/blogs/compute/announcing-websocket-apis-in-amazon-api-gateway/
我尝试部署他们链接的简单聊天应用程序https://serverlessrepo.aws.amazon.com/applications/arn:aws:serverlessrepo:us-east-1:729047367331:applications~simple-websockets-chat-app
我能够使用wscat -c wss://url成功连接,但当我尝试发送消息时,我得到以下错误(有实际的id,我只是不确定它们是从哪里生成的,所以我让它们隐藏起来)

{"message": "Forbidden", "connectionId":"sample_id", "requestId":"sample_id"}

我不太确定是什么问题,因为这应该是一个完整的版本(我是否成功部署并连接到它?),我希望得到一些帮助

ut6juiuv

ut6juiuv1#

在创建任何工作路由之前,必须在API网关上配置$default路由。

wvyml7n5

wvyml7n52#

这对我来说很有用,我需要将对象字符串化,传递操作和数据

var test = { action: "sendmessage", data: "hello world" };

ws.on("open", function open() {
  ws.send(JSON.stringify(test));
});
eqqqjvef

eqqqjvef3#

连接后,尝试

{"message" : "sendMessage", "data" :" hi"}
k3bvogb1

k3bvogb14#

经过几个小时的斗争,有几件事,你可以做:
1.(建议)在您的websocket api中创建一个自定义路由,您将通过websocket连接将消息发送到该路由。然后添加一个lambda集成(或您选择的其他后端集成)。在send命令中,您将路由的名称作为JSON序列化对象中的"action"发送。

ws.send(JSON.stringify({ action: [customRoute], message: "hello" })

注意:您可以发送任意数量的JSON字段,但一定要包含"action"!
1.在apigateway中的$default路由中添加lambda集成(或您选择的其他集成)。所有不是"连接"或"断开连接"的请求都将转到那里,因为您没有该路由的后端集成,AWS会友好地告诉您"禁止",就像apigateway REST API中缺少路由一样。
在这两种情况下,在进行更改后,您需要部署API(在Actions标签下)使这些更改生效。所有这些挫折都可以通过更好的AWS文档来解决。

kx5bkwkv

kx5bkwkv5#

这是我正在做的,但仍然得到了相同的
{“消息”:“禁止”,“连接ID”:“样品ID”,“请求ID”:“样品ID”}

var test = { action: "sendmessage", data: "hello world" };
        connection.onopen = () => {
            connection.send(JSON.stringify(test));
            console.log("connection open?????");
        };
        connection.onerror = error => {
            console.log(`WebSocket error: ${error}`);
        };
        connection.onmessage = e => {
            console.log("On message come here?????")
            console.log("EEEE", JSON.stringify(e));
            console.log(e.data);
        };
nkkqxpd9

nkkqxpd96#

多亏了@prachiSingh提供的解决方案,才能通过稍微调整发送一条示例消息.... {“消息”:“sendmessage”,“data”:“hello”}。基本上对sendmessage使用全部小写。

相关问题