我正在尝试使用React和Redux Form 实现Invisible reCAPTCHA.通常,Invisible reCAPTCHA工作流程是:
grecaptcha.execute使用小部件的ID 调用.如有必要,将提示用户解决挑战.结果将传递给呈现CAPTCHA时指定的回调函数.我已经创建了一个React组件,旨在与Redux Form一起使用,Field它会在grecaptcha.execute调用后呈现CAPTCHA并更新表单状态:
class ReCaptcha extends React.Component {
render() {
return <div ref={div => this.container=div} />
}
componentDidMount() {
const { input: { onChange }, sitekey } = this.props
grecaptcha.render(this.container, {
sitekey,
size: "invisible",
callback: onChange
})
}
}
Run Code Online (Sandbox Code Playgroud)
但是,我不知道grecaptcha.execute在用户提交表单时如何或在何处与小部件ID一起调用.我无法调用它,onSubmit因为那里无法访问小部件ID.我可以ReCaptcha在渲染CAPTCHA之后立即调用它,但是如果用户需要解决CAPTCHA,一旦表单呈现就会提示他这样做.
这个最小的工作示例显示了我迄今取得的成就.
据我所知,gRPC 客户端会自动尝试使用退避算法重新建立丢失的连接。我的目标是让 gRPC 至少每秒尝试重新连接。
使用 Go 实现,这可以通过WithBackoffMaxDelay在首次建立与服务的连接时传递拨号选项来实现。我如何在 Node.js 实现中做同样的事情?
按照建议,我尝试将grpc.max_reconnect_backoff_ms选项传递给客户端构造函数。如果我故意传递一个像 -1 这样的无效值,gRPC 会记录一条错误消息,所以我相信我正在正确使用它。
但是,该选项似乎不会影响 gRPC 的重新连接行为。相反,它似乎大约每 20 秒尝试重新连接一次:
I0215 21:21:07.246695000 140736304567232 subchannel.c:694] Connect failed: {"created":"@1487190067.246665000","description":"Failed to connect to remote host","errno":61,"file":"../src/core/lib/iomgr/tcp_client_uv.c","file_line":104,"os_error":"connection refused"}
I0215 21:21:07.246910000 140736304567232 subchannel.c:491] Retry in 19.999536519 seconds
Run Code Online (Sandbox Code Playgroud)
更令人困惑的是,gRPC 似乎根本不使用退避算法,即它始终使用 ~20s 值。