微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何声明一个持久化子程序的变量

如何解决如何声明一个持久化子程序的变量

在 recv 子例程期间,我目前正在将我的后端更改为另一个后端来处理请求,我需要声明一个变量,该变量将保存它设置的第一个/原始后端的值,以便当请求是重新启动,然后我可以将后端分配回这个。

我不能只使用后端的名称并简单地将其分配回来,因为我需要它是动态的,将其存储在变量中似乎是最简单的解决方案,但我似乎无法找到有关如何实现的任何信息可以通过子程序/重启来实现。

如果不可能,有没有其他解决方案可以尝试实现这一目标?根据我的理解,可能不可能,但即使能够访问定义的后端数组并选择第一个就足够了,我只是不能依靠命名后端来将其分配回来。

解决方法

很遗憾,无法将变量声明为 BACKEND 类型(req.backend 返回的类型)。

请参阅 this 'Fastly Fiddle' example 说明您将收到以下编译器错误:

预期的变量类型,以下之一:BOOL、INTEGER、FLOAT、TIME、RTIME、IP 或 STRING

也没有任何方法可以通过 VCL 获取可用后端的列表。

此外,您还需要对后端值进行硬编码(即,您需要明确知道从 VCL 角度定义了哪些后端),因为尝试将后端存储到标头或变量中会将其转换为STRING 类型表示(例如 6kLtu7NicmMs0DtKsuite9--F_origin_0)。

这意味着即使您能够从字符串中解析实际的 F_origin_0 后端,您也无法将其作为值分配给 req.backend,因为它期望值是类型BACKEND(而且 VCL 没有提供一种方法,AFAIK,将字符串转换为该类型)。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。