【问题标题】:SignalR, websockets and goSignalR、websockets 和 go
【发布时间】:2020-12-09 10:17:01
【问题描述】:

我需要从 Go 连接到 SignalR 服务器。我一直在尝试使用一些库和文章来帮助我:

问题是我需要从不同的端口检索令牌。我的 SignalR 服务器地址是 https://server:10446/endpoint,但我需要从 https://server:10443/connect/token 检索我的令牌,这与正常的 SignalR 协议不同。

我能够得到我的令牌。并且能够获得以下响应的协商步骤:

{
    "connectionId": "JkOfCC0JykJ8hfzm8jd53w",
    "availableTransports": [
      {
        "transport": "WebSockets",
        "transferFormats": [
          "Text",
          "Binary"
        ]
      },
      {
        "transport": "ServerSentEvents",
        "transferFormats": [
          "Text"
        ]
      },
      {
        "transport": "LongPolling",
        "transferFormats": [
          "Text",
          "Binary"
        ]
      }
    ]
  }

然后我尝试通过使用 gorilla websockets 进行 websocket 连接来获得连接:

wss://server:10446/endpoint?transport=WebSockets&id=${ConnectionIDFromNegotiate}&connectionData=[{\"name\":\"HubName\"}]&access_token=${MyRetrievedToken}

此时,我收到一条回复,上面写着101,已升级到 websocket。但是,从这一刻起,我无法继续握手。我正在向服务器发送一条消息,但除了 15-20 秒后握手中止之外,我没有得到任何响应。

这是我用来连接和发送握手消息的代码:

    ws, resp, err := websocket.DefaultDialer.Dial(u.String(), nil)
    if err != nil {
        return nil, err
    }
    if err = ws.WriteMessage(websocket.TextMessage, []byte(`{"protocol": "json","version": 1}`)); err != nil {
        return nil, err
    }

任何想法都会受到热烈欢迎:)

【问题讨论】:

标签: go websocket signalr


【解决方案1】:

Brennan 给出了解决方案。 非常感谢!

您似乎缺少部分消息负载。 Spec github.com/dotnet/aspnetcore/blob/master/src/SignalR/docs/specs/... “HandshakeRequest 和 HandshakeResponse 消息都必须以 ASCII 字符 0x1E(记录分隔符)终止。”

【讨论】:

  • 嗨@Flashito,你让你的客户工作了吗?你能分享你客户的代码吗?
猜你喜欢
  • 2015-08-07
  • 2012-03-20
  • 2012-12-17
  • 1970-01-01
  • 2015-10-19
  • 2017-11-30
  • 1970-01-01
  • 1970-01-01
  • 2021-09-01
相关资源
最近更新 更多