使用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外边还可以放一层变量。
感觉直接http+r2也可以,不用websocket了,websocket写起来还麻烦。
共享全局变量
有两种写法
https://community.cloudflare.com/t/export-default-vs-addeventlistener/472944
目前最新这种写法,全局变量在env里,修改env.xxx可以保存共享,不需要kv之类的额外存储(不过好像不保证始终存在,但是我自测几分钟内是不会丢失的 大概能存活半分钟