Amazon aws websocket api - 禁止消息发送

问题描述 投票:0回答:7

我正在尝试为我的项目实现 websocket api,所以我正在查看本教程 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"}

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

amazon-web-services amazon-ec2 websocket aws-lambda amazon-dynamodb
7个回答
5
投票

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

$default
路由。


3
投票

这对我有用,需要对对象进行字符串化并传递操作和数据

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

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

2
投票

与此斗争了几个小时后,您可以做一些事情:

  1. (推荐)在您的 websocket api 中创建一个自定义路由,您将在其中通过 websocket 连接发送消息。然后添加 lambda 集成(或您选择的其他后端集成)。在发送命令中,您将路由名称作为 JSON 序列化对象中的“操作”发送。
ws.send(JSON.stringify({ action: [customRoute], message: "hello" })

注意:您可以发送任意数量的 JSON 字段,只要确保包含“action”即可!

  1. 将 lambda 集成(或您选择的其他集成)添加到 apigateway 中的
    $default
    路由。所有不是“连接”或“断开”操作的请求都会到达那里,并且由于您没有该路由的后端集成,AWS 会善意地告诉您“禁止”,例如 apigateway REST api 中缺少路由。

在这两种情况下,进行更改后,您需要部署 api(在“操作”选项卡下)以使这些更改生效。所有这些挫折都可以通过更好的 AWS 文档来解决......


2
投票

连接后,尝试

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

0
投票

这就是我正在做的事情,但仍然得到相同的结果

{"message": "禁止", "connectionId":"sample_id", "requestId":"sample_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);
        };

0
投票

您发送的消息应采用 JSON 格式。如果它是基于 JavaScript 的,那么您可以使用 JSON.Stringfy( { action: "", cutomProp: "any value"})。

如果有人对更清晰的解释感兴趣,这个视频将会有所帮助。 https://youtu.be/EZrXBnca4KY


-2
投票

感谢@prachiSingh提供的解决方案,能够通过稍微调整来发送示例消息.... {“message”:“sendmessage”,“data”:“hello”}。基本上全部使用小写来发送消息。

© www.soinside.com 2019 - 2024. All rights reserved.