【问题标题】:Best way to pass messages between 2 different protocol routes connected to same client在连接到同一客户端的 2 个不同协议路由之间传递消息的最佳方式
【发布时间】:2021-08-30 14:37:03
【问题描述】:

我有一个 http 路由 /checkout,它在 Zeebe 中启动了一个工作流程。 checkout 路由将直接返回 200 响应给调用客户端。现在,工作流将运行一段时间。因此,为了在完成后将响应推送回客户端,我有一个/sse 用于服务器发送事件 的单独路由。在这里,我将所有的客户端连接存储在一个全局的map中。

我的疑问是如何找到通过sse 一次发送回响应的确切客户端?

  • 示例:客户端 A 监听 /sse 并调用 /checkout 端点,该端点将返回 200。/sse 必须在之后将响应返回给客户端 A完成。

目前,我想到了使用cookie来识别客户端。有没有更好的办法?

【问题讨论】:

  • Cookie 或。一个简单的唯一标头值就足够了。

标签: go server client server-sent-events


【解决方案1】:

如果您已经在您的应用程序中使用了 cookie,那么您可以这样做,因为 cookie 的目的是识别客户端,所以如果您已经拥有它,那么您应该使用它。

但如果您依赖于其他身份验证机制(如 JWT),您可以做的是使用 url 作为查询。

所以在客户端而不是

let eventSource = new EventSource("/sse");

let eventSource = new EventSource("/sse?authorization=jwt_token");

在后端,您将验证该令牌,提取客户端 ID 并使用它点击该全局映射以检索相应的连接。

(PS:你应该使用适当的存储,而不是全局映射,如 redis,或嵌入的键/值存储,如 bbolt

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多