[AWS] 利用serverless将WebSockets与AWS API Gateway和Lambda一起使用来构建实时应用程序

2023-11-15

1、WebSocket API 概念

WebSocket API由一个或多个路由组成。路由选择表达式用于确定特定请求应使用的路由,该选择将在请求中提供。根据请求对表达式进行求值,以产生与您的路线的routeKey值之一相对应的值。例如:如果您的JSON消息看起来像 {“action” : “onMessage” , “message” : “Hello everyone”},那么将为此请求选择onMessage路由。

默认情况下,WebSocket API中已经定义了三种路由。除了以下提到的路线外,我们还可以根据需要添加自定义路线。

$ default —当路由选择表达式产生的值与API路由中的任何其他路由键都不匹配时使用。例如,这可用于实现通用错误处理机制。

$ connect —客户端第一次连接到WebSocket API时使用关联的路由。

$ disconnect —当客户端从您的API断开连接时,将使用关联的路由。

通过WebSocket API成功连接设备后,将为该设备分配唯一的连接ID。如果建立连接,则该连接ID将在整个生命周期中保持不变。

2、实装用例

serverless中创建4个lambda处理函数

WebsocketConnectHandler:websocket连接建立后处理
WebsocketDisconnectHandler:websocket连接断开后处理
WebsocketSetNotifyListHandler:从websocket处接受监听参数的处理
RcvNotifyParameter:监听IoT参数更新消息并通过websocket通知mApp端参数变化

functions:
  WebsocketConnectHandler:
    handler: subscribers/websocket-event-handler.connect
    events:
      - websocket: $connect
  WebsocketDisconnectHandler:
    handler: websocket-event-handler.disconnect
    events:
      - websocket: $disconnect
  WebsocketSetNotifyListHandler:
    handler: websocket-event-handler.setNotifyList
    events:
      - websocket: set_notify_list
  NotifyParameter:
    handler: websocket-event-handler.notifyParameter
    timeout: 300
    events:
      - iot:
          sql: "SELECT xxxx AS device_id FROM 'topic'"
const AWS = require('aws-sdk');
const ApiGateMngApi = new AWS.ApiGatewayManagementApi({
    apiVersion: "2018-11-29",
    endpoint: xxxx,
});

function connect(event, context, callback) {
    Logger.info("Websocket Connect");
    const connectionId = get(event, "requestContext.connectionId", null);
    Logger.info(`Websocket Connect connectionId: ${connectionId}`);
    callback(null, {statusCode: 200});
}

function disconnect(event, context, callback) {
    Logger.info("Websocket Disconnect start");
    const connectionId = get(event, "requestContext.connectionId", "");
    Logger.info(`connectionId: ${connectionId}`);
    xxx
}

function setNotifyList(event, context, callback) {
    Logger.info("Set notify List start");
    const connectionId = get(event, "requestContext.connectionId", null);
    const createParams = {
       xxx
    }
   
xxx
}

function notifyParameter(event, context, callback) {
    Logger.info("Notify parameter start");
    const deviceId = event.device_id;
    const rcvParams = get(event, 'payload.value', {});
    xxxxApiGateMngApi.postToConnection(params).promise()
}

module.exports = {
    connect,
    disconnect,
    setNotifyList,
    notifyParameter

}

3、测试

建立参数监听连接:

发起iot更新消息

websocket监听到参数变化

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[AWS] 利用serverless将WebSockets与AWS API Gateway和Lambda一起使用来构建实时应用程序 的相关文章

  • AWS SAA-C03 #36

    A company is building an application in the AWS Cloud The application will store data in Amazon S3 buckets in two AWS Re
  • 京东、阿里、小米IoT平台设备接入对比分析

    概述 京东 阿里 小米都在积极布局物联网 智能家居方向 经过几年的运营和积累 各家平台接入了不同产品 形成了各自的发展模式 本报告从平台设备的视角 通过分析各平台设备接入情况 对比已接入的设备品类 摸清平台的布局 分析各平台优劣势 为物联网
  • PCB中常见错误大全

    PCB中常见错误大全 唯样商城 给你整得明明白白 线上授权代理商 唯样商城有超10万种现货库存 2000万型号数据库 满足您的元器件正品现货采购需求 一 原理图常见错误 1 ERC报告管脚没有接入信号 a 创建封装时给管脚定义了I O属性
  • 【AWS】API Gateway创建Rest API--从S3下载文件

    一 背景 在不给AK SK的前提下 用户查看s3上文件 从s3下载文件 二 创建API 1 打开API Gateway 点击创建API 选择REST API REST API和HTTP API区别 来自AWS官网 REST API 和 HT
  • 药明康德成都研发中心投入运营;中国白酒行业净利润将迎来七年来首次下滑

    今日看点 药明康德成都研发中心正式投入运营 该研发中心将成为药明康德上海研发总部以外 又一个覆盖化学及生物学的新药发现整体研发平台 将为客户提供从小分子药物设计 合成 分析 体内体外生物学 肿瘤免疫学等全方位 一体化的新药研发服务 该研发中
  • AWS 亚马逊云良好架构框架

    根据多年来AWS的专家们积累的经验 创建了这一份AWS良好架构框架 其中包含了以下五大支柱 安全性 Security 可靠性 Reliability 性能效率 Performance Efficiency 成本优化 Cost Optimis
  • 【转载】浅谈蓝牙 Mesh 组网技术

    本文转载自 Eren https www erenship com posts 63c7 html 蓝牙技术联盟官方网址 https www bluetooth com zh cn 蓝牙技术联盟公众号 BluetoothSIG 蓝牙技术联盟
  • 【BLE】蓝牙外围设备升级(OTA)

    目录 需求分析 升级协议交互 协议具体定义 协议交互进一步解读 一个校验单位 4K 的具体传输方式 方案实现 总结 需求分析 本案例中 智能手表作为中央设备对心率带通过BLE进行升级 这里手表首先要通过某种方式获得心率带的固件 然后通过BL
  • AWS平台之DDoS攻击防范

    AWS平台之DDoS攻击防范 互联网上的DDoS攻击无处不在 游戏 互联网等大部分行业的客户也往往深受其害 本文主要介绍DDoS攻击的主要方式 AWS的基础设施和服务的介绍 以及如何利用AWS资源防范DDoS攻击 保护用户系统的安全 什么是
  • 如何在 JavaScript 中捕获 ERR_CERT_AUTHORITY_INVALID

    我正在开发的 Web 应用程序需要从本地网络内的许多不同的 IOT 获取数据 例如 const response await fetch https 192 168 0 245 api auto login options 由于是https
  • 英特尔 Edison MRAA 模块不工作

    我最近下载了 Intel XDK IOT 版本并使用了 LED 引脚 13 闪烁示例 然后我将程序上传到爱迪生上 但它出现了一些错误 其中之一是找不到 MRAA 模块 附带的示例代码是 main js var mraa new requir
  • 在客户端-服务器设置中两个 ESP8266 之间的通信速度更快

    我正在尝试在两个 ESP8266 12 E 模块之间进行通信 一个设置为接入点模式 另一个设置为站 我的目的是在两者之间建立沟通 如何才能使数据传输更快 这就是所谓的TCP IP连接吗 接入点的代码 include
  • BLE 广告 RawData - 如何解码?

    我有一个连接到网关的 E66 健身手环 该手环确实连接到网关 并且我通过 MQTT 接收数据 但我不确定如何解码 RawData 格式 有人可以帮助我吗 谢谢 TimeStamp 2020 05 30 16 44 32 DataFormat
  • 终于,AWS Aurora 也走向了融合架构,这一次阿里云 PolarDB-X 确实遥遥领先

    作者 张云杨 2023 年 11 月 27 日 AWS 在 re Invent 大会上宣布推出 Amazon Aurora Limitless Database 预览版 根据 官方博客 的说明 Aurora Limitless 允许用户在
  • 如何在 Windows Core IoT 应用程序中显示当前时间的时钟?

    我正在尝试创建一个在 Raspberry Pi 2 上无头运行的 Windows 10 IoT 应用程序 一切都设置正确 我可以使用 Raspberry Pi 作为远程机器进行调试 从 Visual Studio 进行调试 现在我想在应用程
  • Docker与云计算平台集成:AWS、Azure、GCP完全指南

    Docker和云计算平台的结合 如AWS Amazon Web Services Azure Microsoft Azure 和GCP Google Cloud Platform 为现代应用的构建和部署提供了巨大的便利性 本文将深入研究如何
  • AWS解决方案架构师学习与备考

    系列文章目录 送书第一期 用户画像 平台构建与业务实践 送书活动之抽奖工具的打造 获取博客评论用户抽取幸运中奖者 送书第二期 Spring Cloud Alibaba核心技术与实战案例 送书第三期 深入浅出Java虚拟机 送书第四期 AI时
  • AWS解决方案架构师学习与备考

    系列文章目录 送书第一期 用户画像 平台构建与业务实践 送书活动之抽奖工具的打造 获取博客评论用户抽取幸运中奖者 送书第二期 Spring Cloud Alibaba核心技术与实战案例 送书第三期 深入浅出Java虚拟机 送书第四期 AI时
  • Spring Boot 应用程序一天后冻结

    我有一个 Spring Boot 应用程序在两台服务器上运行 它接受文件上传请求 约 1 KB 通过来自 1000 个物联网设备的控制器 另外还有一个TCP监听器它还接受来自这些物联网设备的 GPS 数据作为流 我已将一台服务器上的 Tom
  • AWS-IoT 核心代理的最大消息负载大小是多少?

    在文档中AWS 服务限制 https docs aws amazon com general latest gr aws service limits htmlIoT Core 服务的有效负载大小限制尚不清楚 既然我们可以将本地 mosqu

随机推荐

  • 【论文翻译】【剪枝】Filter Pruning via Geometric Medianfor Deep Convolutional Neural Networks Acceleration

    目录 摘要 1 介绍 2 相关工作 3 方法 3 1 前置内容 3 2 基于规范的准则分析 3 3 真实场景中的Norm统计 3 4 通过几何中值进行过滤修剪 3 5 理论和现实加速 3 5 1理论加速 3 5 2 实际加速 4 实验 4
  • [LeetCode]二叉树题目总结

    LeetCode 二叉树习题个人总结 近一个月来 刷了不少LeetCode题目 但是总还是感觉提高的不多 自己最初想的一边做一边总结的初衷也没有正常执行 今晚静下心来 总结一下和二叉树有关的题目 基础题目 二叉树遍历 Binary Tree
  • 有哪些研究数据结构的好的方法?

    来源 我是码农 转载请保留出处和链接 本文链接 http www 54manong com id 17 研究数据结构是为了编写程序 编写程序是为了解决问题 用计算机求解一个现实问题 一般可用以下的问题求解模型加以描述 现实问题 数学模型 算
  • C++知识点——仿函数

    仿函数 并不是函数 却有着类似于函数的行为 简单地说就是重载括号运算符号 把对象当作一个函数用 仿函数拥有自己的数据成员 意味着仿函数拥有状态 include
  • 【MMDetection】bug记录

    bug1 if env cfg get cudnn benchmark AttributeError NoneType object has no attribute get 解决办法 配置文件缺少了env cfg信息 需要在config文
  • php error:0A000126:SSL routines::unexpected eof while reading

    文章目录 问题 解决 问题 file get contents https api weixin qq com sns jscode2session appid this gt appid secret this gt secret js
  • 32位/64位 libmysql.dll和libmysql.lib下载

    为了解决C MFC 32位程序不能连接64位MySQL数据库 需要用到32位的libmysql dll和libmysql lib 花了好久才找到 直接附上官网下载地址 https downloads mysql com archives c
  • aop中获取@PathVariable参数

    1 controller中的声明 2 aop中获取 RequestAttributes attributes RequestContextHolder getRequestAttributes ServletRequestAttribute
  • 【对比Java学Kotlin】数据类

    我们在 Java 里面会创建一些专门用于盛放数据的类 比如各种以 Bean Model 作为后缀结尾的类 这些类的成员变量通常是各种类型的数据 成员函数是 setter 和 getter 或者偷懒的同学直接把成员变量的可见性设置为 publ
  • 封装C++风格的rdkafka库

    项目中用到了kafka 系统是C 开发的 没有现成的可集成API 查阅github 发现有rdkafka 这个C库 挺好用的 但是 他依然不够简洁 因此 对他做了一下封装 ifndef KAFKAMQ H define KAFKAMQ H
  • frida的基本命令

    1 frida ps Ua 打印usb连接设备正在运行的进程 进程ID 进程名 包名 2 frida ps Uai 打印usb连接设备上所有的进程 进程ID 进程名 包名 3 frida加载js脚本 frida U l js 进程名或进程I
  • VScode 路径自动补全插件: Path Autocomplete、Path Intellisense

    目录 前言 路径自动补全插件 Path Autocomplete Path Intellisense 配置 编辑设置 json 顺路安利一个文件 icon 插件 Material Icon Theme 后记 Path Autocomplet
  • K8S生命周期---初始化容器(Init Container)

    Init 容器 Init 容器是一种特殊容器 在 Pod 内的应用容器启动之前运行 Init 容器可以包括一些应用镜像中不存在的实用工具和安装脚本 你可以在 Pod 的规约中与用来描述应用容器的 containers 数组平行的位置指定 I
  • 极氪汽车的云资源治理细探

    作者 极氪汽车吴超 前言 2021 年 极氪 001 迅速崭露头角 仅用 110 天便创下了首款车型交付量 最快破万 的纪录 2022 年 11 月 极氪 009 在短短 76 天内便率先完成了首批交付 刷新了中国豪华纯电品牌交付速度的纪录
  • go语言之tcp编程

    效果展示 原理图解 源码编写 go服务端的编写 package main import fmt net func processData conn net Conn 数据处理完之后关闭连接 defer conn Close for buf
  • 组合逻辑电路的设计(二) -- 五路输入呼叫显示电路和两个BCD8421码的加法运算电路

    一 实验任务及要求 1 设计要求 2题任选1题 鼓励2题都做 1 设计一个五路输入呼叫显示电路 5个数码开关分别模拟用户的输入信号 用户优先权按用户编号依次递减 即1号的优先权最高 5号最低 1至5号按键输入时 七段数码管对应显示1 2 3
  • ChatGPT写新闻-ChatGPT写文章

    ChatGPT写新闻 ChatGPT可以用于生成新闻稿件 但需要注意的是 由ChatGPT生成的新闻稿件可能存在语义 逻辑 事实准确性等方面的问题 因此需要进行人工审核和编辑 确保其准确性 下面是一个示例过程 大致了解如何使用ChatGPT
  • 计算机中丢失VCRUNTIME140_1怎么办,vcruntime140_1.dll的三个修复方法

    vcruntime140 1 dll是一个Windows系统文件 它是Microsoft Visual C Redistributable for Visual Studio 2019软件包的一部分 用于运行使用Visual C 开发的应用
  • 天地图WMTS地图瓦片下载

    最近在开发个人项目中遇到了这样一个问题 即 本地开发使用天地图在线地图服务 部署到线上时 突然想到 天地图提供的开放地图服务是需要申请秘钥key才能够使用的 而且需要连接外网 同时也是有访问次数限制的 那么 如果是在内网环境中如何进行迁移呢
  • [AWS] 利用serverless将WebSockets与AWS API Gateway和Lambda一起使用来构建实时应用程序

    1 WebSocket API 概念 WebSocket API由一个或多个路由组成 路由选择表达式用于确定特定请求应使用的路由 该选择将在请求中提供 根据请求对表达式进行求值 以产生与您的路线的routeKey值之一相对应的值 例如 如果