登录
首页 >  Golang >  Go问答

实时通信技术:SignalR、WebSocket 和 Go

来源:stackoverflow

时间:2024-03-05 20:45:26 346浏览 收藏

哈喽!今天心血来潮给大家带来了《实时通信技术:SignalR、WebSocket 和 Go》,想必大家应该对Golang都不陌生吧,那么阅读本文就都不会很困难,以下内容主要涉及到,若是你正在学习Golang,千万别错过这篇文章~希望能帮助到你!

问题内容

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

  • https://github.com/x2v3/signalr
  • https://github.com/devigned/signalr-go
  • https://www.derpturkey.com/signalr-is-an-abomination-how-to-connect-using-raw-websockets/
  • https://blog.3d-logic.com/2015/03/29/signalr-on-the-wire-an-informal-description-of-the-signalr-protocol/

问题是我需要从不同的端口检索令牌。我的 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
    }

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


解决方案


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

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

文中关于的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《实时通信技术:SignalR、WebSocket 和 Go》文章吧,也可关注golang学习网公众号了解相关技术文章。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>