云函数 Web Function 反对原生 WebSocket 协定后,受到了泛滥开发者的关注,与此同时,咱们也收到了许多疑难和反馈。本篇文章将大家关注的点总结了七大问题并进行了一一解答,心愿能够帮忙您更好了解和应用云函数的 WebSocket 性能。
01. 事件函数、Web 函数、WebSocket 之间的关系?
目前函数反对了不同类型的函数,写法和反对性能上都有肯定区别,几种函数类型关系如图:
<img src=”https://qcloudimg.tencent-cloud.cn/raw/cdf969ad905d59825b841e03b1c656b5.png” width=”700″/>
因为接管的触发源类型不同,云函数反对了 Web 函数与事件函数为两大类型,Web 函数下又反对不同的 Web 协定,能够依据理论业务抉择对应的函数类型。
<img src=”https://qcloudimg.tencent-cloud.cn/raw/e1b8ced271d1ca2209855ff22f2f29c7.png” width=”700″/>
02. 云函数上应用 WebSocket,代码到底应该怎么写?
对于传统开发者而言,遇到的最大问题是不晓得如何在云端写函数,Web 函数提供了最原生的开发方式,以 WebSocket 服务器代码开发为例,除了须要指定监听端口外,本地业务代码和云端业务代码并无其它区别,间接部署上传即可,示例如下:
<img src=”https://qcloudimg.tencent-cloud.cn/raw/558a97de328b0c54dfebf2606be75df0.png” width=”700″/>
<img src=”https://qcloudimg.tencent-cloud.cn/raw/33c43794015fe77f9fdda55a7556ad0f.png” width=”700″/>
scf_bootstrap
示例:
#!/bin/bash
/var/lang/node12/bin/node app.js
03. 已部署为 http&https 协定的 Web 函数,是否降级为 WebSocket 协定?
目前还不反对函数协定的间接转换,倡议采纳创立新函数的形式体验 WebSocket 的性能。
04. 在 WebSocket 场景下,函数的超时工夫是如何定义的?
WebSocket 的场景下,超时工夫分为三局部,介绍如下:
- 初始化超时工夫:函数初始化阶段包含筹备函数代码、筹备镜像、筹备层等相干资源以及执行函数主流程代码,可选值范畴为 3 秒 -300 秒,镜像部署函数默认 90 秒,其余函数默认 60 秒。
- 执行超时工夫:函数的最长运行工夫,对 WS 协定而言,此处指从发动连贯申请到连贯断开,实现一次调用的工夫,如果您的业务场景对 WS 有长时间放弃连贯的要求,倡议调大该工夫
- WS 闲暇超时工夫:指 WS 的闲暇等待时间,可选范畴 1~600 秒。
05. 对于 WebSocket 函数,应该如何查看运行日志?常见状态码与谬误起因?
日志查看的形式与事件函数雷同,您能够通过 console.log()
、print()
等通用形式实现日志打印,并在控制台查看到运行日志。
状态码阐明:
断开状况 | 函数体现 | 函数状态码 |
---|---|---|
客户端或服务端发动连贯完结、敞开连贯操作,完结状态码为 1000、1010(客户端发送)、1011(服务端发送) | 函数失常执行完结,运行状态为胜利 | 200 |
客户端或服务端发动连贯完结、敞开连贯操作,完结状态码非 1000、1010、1011 | 函数异样完结,运行状态为失败 | 439(服务端敞开)、456(客户端敞开) |
在 WS 连贯上无音讯上行或上行发送,达到配置的闲暇超时工夫的状况下,连贯被函数平台断开 | 函数异样完结,运行状态为失败 | 455 |
在连贯建设后继续应用,函数运行工夫达到最大运行时长,连贯被函数平台断开 | 函数异样完结,运行状态失败 | 433 |
更具体的函数状态码可见云函数状态码列表。
06. WebSocket 的常见应用场景如聊天室,须要实现连贯信息的注册存储,在云函数架构下该如何实现?
云函数为单实例单并发,对于聊天室场景,不同用户的申请拜访后盾服务时,云函数会依据理论申请数量进行扩缩容调整后盾实例数,不同实例之间,须要新增音讯队列 /Redis 作为中间件层,实现多 Server 之间的通信,从而实现音讯的精准播送:
- 建设连贯模块,函数通过 WS 申请进行连贯信息的筛选,并记录到音讯队列 /Redis 中实现注册:
<img src=”https://qcloudimg.tencent-cloud.cn/raw/b8372b26aa1b08f5a54600574b19ec7e.png” width=”700″/>
- 音讯传输模块,云函数将发送申请的申请 ID,发送给中间件,依据 ID 决定音讯的播送或指定用户发送,网关侧透传申请,不做非凡业务逻辑解决
<img src=”https://qcloudimg.tencent-cloud.cn/raw/dfc52fda8eeb99f41c73ee18ce15c5fe.png” width=”700″/>
- 音讯清理模块,用户断开连接,函数同步清理中间件层的注册音讯
<img src=”https://qcloudimg.tencent-cloud.cn/raw/b780beba5d8b159be4166d5c715deda9.png” width=”700″/>
07. Http 协定和 WS 是否混用?冀望用户通过 Http 拜访,但 WS 来转发
对于 Web 函数,这种场景是能够实现的,但架构上无奈通过繁多函数治理,而是须要应用两个函数,并在两头通过一个音讯队列 /Redis 作为中间件来连贯,参考架构如图:
<img src=”https://qcloudimg.tencent-cloud.cn/raw/76fea653e7ebd91523557c132860e757.png” width=”700″/>
08. WebSocket 往往须要始终放弃心跳,这里如何计费?
WebSocket 的计费项与事件函数雷同,各个计费项阐明如下:
- Web 函数调用次数:依照每次 WS 建设连贯免费,连贯后续的心跳次数不做计费;
(Web 函数调用费用行将进行优化,敬请期待)
- 函数资源量 GBs:依照连贯从 WS 建设到断开的总工夫统计函数运行时长,设置正当的超时工夫能够无效节俭费用;
- 外网出流量:函数对外拜访的流量费用,与现有函数统计形式雷同。
One More Thing
立刻体验腾讯云 Serverless Demo,支付 Serverless 新用户礼包 👉 腾讯云 Serverless 老手体验。