上云无忧 > 文档中心 > 腾讯云云函数使用教程 - Websocket使用方法
云函数 SCF
腾讯云云函数使用教程 - Websocket使用方法

文档简介:
说明: 本文介绍事件函数支持 WebSocket 的解决方案,目前 Web 函数已经支持原生 WebSocket 协议,详情请参见 WebSocket 协议支持。
*此产品及展示信息均由腾讯云官方提供。免费试用 咨询热线:400-826-7010,为您提供专业的售前咨询,让您快速了解云产品,助您轻松上云! 微信咨询
  免费试用、价格特惠
说明
本文介绍事件函数支持 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 json
import requests
def 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 json
import requests
g_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 json
import requests
g_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 retmsg
def 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 网关的创建及使用方法。
相似文档
  • 用户可以编写 SCF 函数来处理 COS Bucket 中的对象创建和对象删除事件。COS 可将事件发布给 SCF 函数并将事件数据作为参数来调用该函数。用户可以在 COS Bucket 中添加存储桶通知配置,该配置可标识触发函数的事件类型和希望调用的函数名称等信息。
  • 本篇文档将为您指导,如何创建 COS 触发器并完成函数的调用。 步骤1:创建函数。 登录 Serverless控制台,在新建函数页面,完成您的函数代码上传与部署。详情可参见 使用控制台创建一个事件函数。
  • 用户可以编写云函数 SCF 来处理 CLS 日志服务中采集到的日志,通过将采集到的日志作为参数传递来调用 SCF 云函数,函数代码可以对其进行数据加工处理、分析或将其转储到其他云产品。
  • 本篇文档将为您指导,如何创建 CLS 触发器并完成函数的调用。 步骤1:创建函数。 登录 Serverless控制台,在新建函数页面,完成您的函数代码上传与部署。详情可参见 使用控制台创建一个事件函数。
  • 用户可以编写 SCF 函数来处理定时任务(支持秒级触发)。定时器会在指定时间自动触发 SCF 函数。定时触发器具有以下特点: Push 模型:定时器指定时间到达时直接调用相关函数的 Invoke 接口来触发函数。该事件源映射关系保存在 SCF 函数中。 异步调用:定时器始终使用异步调用类型来调用函数,结果不会返回给调用方。有关调用类型的更多信息,请参阅 调用类型。
官方微信
联系客服
400-826-7010
7x24小时客服热线
分享
  • QQ好友
  • QQ空间
  • 微信
  • 微博
返回顶部