使用cloudflare的免费workers建立一个esp32cam监控的方案研究

一开始我是研究了websockets

https://developers.cloudflare.com/workers/examples/websockets/

esp32cam--workers--手机浏览器

其中workers的逻辑是,把esp32cam的图片数据保存在一个内存变量中,然后在手机浏览器请求的时候,把这个图片转发出去。

 

如果您的应用程序需要在多个 WebSocket 连接之间进行协调,例如聊天室或游戏比赛,您将需要客户端将消息发送到单点协调。Durable Objects 为 Cloudflare Workers 提供单点协调,并且通常与 WebSockets 并行使用,以在多个客户端和连接上保持状态。在这种情况下,请参阅Durable Objects以开始使用,并优先使用 Durable Objects 的扩展WebSockets API。

 

但是吧,如上面所述,esp32cam--workers    workers--手机浏览器 这俩websocket连接中的内存变量是不共享的(应该是不共享的?虽然搜了下有少量文章说可以共享全局变量,但是自测不行),需要通过Durable Objects或者其他的什么storage-options来做中介。跟服务器中运行的程序不一样,服务器中,fetch外边还可以放一层变量。

addEventListener('fetch', event => {
  event.respondWith(handleRequest(event.request))
})
 
但是吧“Durable Objects are only available on the Workers Paid plan.”所以免费没法用Durable Objects。
所以只能修改思路了

 

感觉直接http+r2也可以,不用websocket了,websocket写起来还麻烦。

 

 

共享全局变量

有两种写法

https://community.cloudflare.com/t/export-default-vs-addeventlistener/472944

 

目前最新这种写法,全局变量在env里,修改env.xxx可以保存共享,不需要kv之类的额外存储(不过好像不保证始终存在,但是我自测几分钟内是不会丢失的  大概能存活半分钟

posted @ 2024-08-29 13:04  hrdom  阅读(20)  评论(0编辑  收藏  举报