首页 > 解决方案 > SignalR HubConnection中的skipNegotiation是什么意思?

问题描述

之间有什么区别

this.hubConnection = new signalR.HubConnectionBuilder()
  .withUrl(environment.API_URL + "invoicinghub", {
    skipNegotiation: true,
    transport: signalR.HttpTransportType.WebSockets
  })
  .withAutomaticReconnect([0, 2000, 10000, 30000, null])
  .build();

this.hubConnection = new signalR.HubConnectionBuilder()
  .withUrl(environment.API_URL + "invoicinghub", {     
    transport: signalR.HttpTransportType.WebSockets
  })
  .withAutomaticReconnect([0, 2000, 10000, 30000, null])
  .build();

这是什么skipNegotiation:是的。

谢谢!

标签: angularazureasp.net-corewebsocketsignalr

解决方案


在 SignalR 中,客户端首先向服务器发送协商请求,服务器会使用重定向 URL 和访问令牌(如果有)进行响应。

客户要求

{
  "connectionId":"807809a5-31bf-470d-9e23-afaee35d8a0d",
  "availableTransports":[
    {
      "transport": "WebSockets",
      "transferFormats": [ "Text", "Binary" ]
    },
    {
      "transport": "ServerSentEvents",
      "transferFormats": [ "Text" ]
    },
    {
      "transport": "LongPolling",
      "transferFormats": [ "Text", "Binary" ]
    }
  ]
}

服务器响应

{
    "url":"https://test.service.signalr.net/client/?hub=chat&...",
    "accessToken":"<a typical JWT token>"
}

只有在收到服务器的响应后,客户端才会建立连接。

在 SignalR Core 中,但不是在 SignalR ASP 中,这需要粘性会话。为了避免使用粘性会话,客户端需要跳过协商,但仅限于在websockets没有 Azure 的情况下使用。

资料来源:


推荐阅读