详情页标题前

腾讯云云函数(SCF)使用方法-云淘科技

详情页1

说明本文介绍事件函数支持 WebSocket 的解决方案,目前 Web 函数已经支持原生 WebSocket 协议,详情请参见 WebSocket 协议支持。在 原理介绍 章节中,提到需要3类云函数来承载与 API 网关之间的交互:注册函数:在客户端发起和 API 网关之间建立 WebSocket 连接时触发该函数,通知 SCF WebSocket 连接的 secConnectionID。通常会在该函数记录 secConnectionID 到持久存储中,用于后续数据的反向推送。清理函数:在客户端主动发起 WebSocket 连接中断请求时触发该函数,通知 SCF 准备断开连接的 secConnectionID。通常会在该函数清理持久存储中记录的该 secConnectionID。传输函数:在客户端通过 WebSocket 连接发送数据时触发该函数,告知 SCF 连接的 secConnectionID 以及发送的数据。通常会在该函数处理业务数据。例如,是否将数据推送给持久存储中的其他 secConnectionID。注意当您需要主动给某个 secConnectionID 推送数据或主动断开某个 secConnectionID 时,均需要用到 API 网关的反向推送地址。本文档以 Python2.7 为例,介绍各类函数 main_handler 的写法。

函数代码示例

注册函数

# -*- coding: utf8 -*-import jsonimport requestsdef main_handler(event, context):    print('Start Register function')    print("event is %s"%event)    retmsg = {}    global connectionID    if 'requestContext' not in event.keys():        return {"errNo":101, "errMsg":"not found request context"}    if 'websocket' not in event.keys():        return {"errNo":102, "errMsg":"not found websocket"}    connectionID = event['websocket']['secConnectionID']    retmsg['errNo'] = 0    retmsg['errMsg'] = "ok"     retmsg['websocket'] = {            "action":"connecting",            "secConnectionID":connectionID        }    if "secWebSocketProtocol" in event['websocket'].keys():        retmsg['websocket']['secWebSocketProtocol'] = event['websocket']['secWebSocketProtocol']    if "secWebSocketExtensions" in event['websocket'].keys():        ext = event['websocket']['secWebSocketExtensions']        retext = []        exts = ext.split(";")        print(exts)        for e in exts:            e = e.strip(" ")            if e == "permessage-deflate":                #retext.append(e)                pass            if e == "client_max_window_bits":                #retext.append(e+"=15")                pass        retmsg['websocket']['secWebSocketExtensions'] = ";".join(retext)    print("connecting \n connection id:%s"%event['websocket']['secConnectionID'])    print(retmsg)    return retmsg

注意在本函数中,您可以自行扩充其他业务逻辑。例如,将 secConnectionID 保存到 TencentDB 中,创建并关联聊天室等。

传输函数

# -*- coding: utf8 -*-import jsonimport requestsg_connectionID = 'xxxx'  #转发消息到某个特定的 websocket 连接sendbackHost = "http://set-7og8wn64.cb-beijing.apigateway.tencentyun.com/api-xxxx" #API 网关的反向推送地址,在下一步 API 创建好后才能拿到#主动向 Client 端推送消息def send(connectionID,data):    retmsg = {}    retmsg['websocket'] = {}    retmsg['websocket']['action'] = "data send"    retmsg['websocket']['secConnectionID'] = connectionID    retmsg['websocket']['dataType'] = 'text'    retmsg['websocket']['data'] = json.dumps(data)    print("send msg is %s"%retmsg)    r = requests.post(sendbackHost, json=retmsg)   def main_handler(event, context):    print('Start Transmission function')    print("event is %s"%event)    if 'websocket' not in event.keys():        return {"errNo":102, "errMsg":"not found web socket"}    for k in event['websocket'].keys():        print(k+":"+event['websocket'][k])    # 发送内容给某个客户端    #connectionID = event['websocket']['secConnectionID']    data = event['websocket']['data']    send(g_connectionID,data)    return event

注意在本函数中,您可以自行扩充其他业务逻辑。例如,将本次获取的数据转发给其他保存在 TencentDB 中的 secConnectionID。在 API 网关的 API 详情中,可以获取 API 网关的反向推送地址。具体操作参看 配置 API 网关。

清理函数

import jsonimport requestsg_connectionID = 'xxxx'  #转发消息到某个特定的 websocket 连接sendbackHost = "http://set-7og8wn64.cb-beijing.apigateway.tencentyun.com/api-xxxx" #API 网关的反向推送地址,在下一步 API 创建好后才能拿到#主动发送断开信息def close(connectionID):    retmsg = {}    retmsg['websocket'] = {}    retmsg['websocket']['action'] = "closing"    retmsg['websocket']['secConnectionID'] = connectionID    r = requests.post(sendbackHost, json=retmsg)    return retmsgdef main_handler(event, context):    print('Start Delete function')    print("event is %s"%event)    if 'websocket' not in event.keys():        return {"errNo":102, "errMsg":"not found web socket"}    for k in event['websocket'].keys():        print(k+":"+event['websocket'][k])            #close(g_connectionID)    return event

注意在本函数中,您可以自行扩充其他业务逻辑。例如,将本次断开的 secConnectionID 从 TencentDB 中移除,或强制某个 secConnectionID 的 Client 下线。您可前往 基于 Websocket 搭建匿名聊天室,通过实践了解云函数及 API 网关的创建及使用方法。
官网1折活动,限时活动,即将结束,速速收藏
同尘科技腾讯云授权服务中心。
购买腾讯云产品享受折上折,更有现金返利。同意关联立享优惠

转转请注明出处:https://www.yunxiaoer.com/149529.html

(0)
上一篇 2023年12月9日 下午1:20
下一篇 2023年12月9日
详情页2

相关推荐

  • 阿里云容器服务ACK云盘存储卷FAQ-云淘科技

    本文介绍在ACK集群中使用云盘存储卷遇到的常见问题及处理方法。 类型 问题 云盘创建 动态创建PV失败且提示InvalidDataDiskCatagory.NotSupported 动态创建PV失败且提示The specified AZone inventory is insufficient 动态创建PV失败且提示disk size is not supp…

    阿里云容器服务 2023年12月10日
  • 腾讯云对象存储搜索模板接口

    简介 本文档提供关于搜索模板接口的 API 概览和 SDK 示例代码。 API 操作描述 搜索动图模板 用于搜索动图模板 搜索截图模板 用于搜索截图模板 搜索水印模板 用于搜索水印模板 搜索转码模板 用于搜索转码模板 搜索拼接模板 用于搜索拼接模板 搜索极速高清转码模板 用于搜索极速高清转码模板 搜索精彩集锦模板 用于搜索精彩集锦模板 搜索人声分离模板 用于…

    腾讯云 2023年12月9日
  • 腾讯云对象存储支持的功能和效果

    以下是文档转图片功能支持的功能和效果: 类型 文件名后缀 支持的功能和效果 演示 ppt、pptx、pptm、ppsx、ppsm、pps、potx、potm、dpt、dps 幻灯片背景、对象边框/填充、对象阴影/倒影、文本(横/竖向文本框、占位符、形状)、图片、链接、艺术字、形状、表格、图表、公式、符号、脑图、流程图 文字 doc、dot、wps、wpt、d…

    腾讯云 2023年12月9日
  • 信息流广告,信息流部分建议宽度830px,只针对默认列表样式,顺序随机
  • 腾讯云批量计算进阶实践

    腾讯云为广大用户提供了多种类型的视频教程,为服务开发者提供了专业的云技术学习平台。以下是批量计算进阶实践相关视频教程: 官网1折活动,限时活动,即将结束,速速收藏同尘科技为腾讯云授权服务中心。购买腾讯云产品享受折上折,更有现金返利。同意关联立享优惠

    腾讯云 2023年12月9日
  • 阿里云日志服务SLS多源Logstore数据汇总-云淘科技

    日志服务支持对每一个源Logstore配置一个数据加工任务,实现多源Logstore数据汇总。本文介绍多源Logstore数据汇总的典型应用场景和对应的操作方法。 背景信息 某资讯网站业务分布全球,不同资讯频道的用户访问日志被采集存储在阿里云不同账号中的Logstore,现有需求将同一目标区域英国(伦敦)的用户请求访问信息日志进行汇总从而进行后续的查询与分析…

    2023年12月10日

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
本站为广大会员提供阿里云、腾讯云、华为云、百度云等一线大厂的购买,续费优惠,保证底价,买贵退差。