我正在尝试为我的项目实现 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"}
我不太确定出了什么问题,因为这应该是一个完整的版本(我确实成功部署并连接到它?),我希望得到一些帮助
在创建任何工作路由之前,您必须已在 API 网关上配置
$default
路由。
这对我有用,需要对对象进行字符串化并传递操作和数据
var test = { action: "sendmessage", data: "hello world" };
ws.on("open", function open() {
ws.send(JSON.stringify(test));
});
与此斗争了几个小时后,您可以做一些事情:
ws.send(JSON.stringify({ action: [customRoute], message: "hello" })
注意:您可以发送任意数量的 JSON 字段,只要确保包含“action”即可!
$default
路由。所有不是“连接”或“断开”操作的请求都会到达那里,并且由于您没有该路由的后端集成,AWS 会善意地告诉您“禁止”,例如 apigateway REST api 中缺少路由。在这两种情况下,进行更改后,您需要部署 api(在“操作”选项卡下)以使这些更改生效。所有这些挫折都可以通过更好的 AWS 文档来解决......
连接后,尝试
{"message" : "sendMessage", "data" :" hi"}
这就是我正在做的事情,但仍然得到相同的结果
{"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);
};
您发送的消息应采用 JSON 格式。如果它是基于 JavaScript 的,那么您可以使用 JSON.Stringfy( { action: "", cutomProp: "any value"})。
如果有人对更清晰的解释感兴趣,这个视频将会有所帮助。 https://youtu.be/EZrXBnca4KY
感谢@prachiSingh提供的解决方案,能够通过稍微调整来发送示例消息.... {“message”:“sendmessage”,“data”:“hello”}。基本上全部使用小写来发送消息。