SignalR 如何使用 TypeScript 客户端接收 64 位整数

问题描述 投票:0回答:1

从 .net signalr 服务器发送 64 位整数不是问题。 然而在客户端,这会变得复杂,因为数字并不完全涵盖 64 位整数。 文档也没有提及任何内容。有人知道该怎么做吗?

json asp.net-core-mvc signalr.client asp.net-core-signalr bigint
1个回答
0
投票

我定义了一个自定义的 IHubProtocol 来使用 JSONbig.parse 而不是标准的 JSON.parse 来解析来自 SignalR 的数据。 以下是我使用 React 框架开发的应用程序中使用的参考代码:

import {
  HubConnection,
  HubConnectionBuilder,
  HubMessage,
  IHubProtocol,
  ILogger,
  JsonHubProtocol,
  LogLevel,
  TransferFormat,
} from "@microsoft/signalr"
import JSONbig from "json-bigint"

export const data: { connection: HubConnection | null } = { connection: null }

class BigIntJsonHubProtocol implements IHubProtocol {
  name = "json"
  version = 1
  transferFormat = TransferFormat.Text
  originalProtocol = new JsonHubProtocol()

  parseMessages(input: string, _logger: ILogger) {
    return [JSONbig.parse(input)]
  }

  writeMessage(message: HubMessage) {
    return this.originalProtocol.writeMessage(message)
  }
} 

export function initConnection() {
  return new Promise((resolve, reject) => {
    data.connection = new HubConnectionBuilder()
      .withUrl(`${process.env.REACT_APP_BE_URL}hubs/dashboard`)
      .withHubProtocol(new BigIntJsonHubProtocol())
      .configureLogging(LogLevel.Information)
      .build()

    data.connection
      .start()
      .then(() => {
        data.connection?.on("yourMetodName", YourHandler)
        resolve("signalR.connected")
      })
      .catch((error) => {
        reject(error)
      })
  })
}
© www.soinside.com 2019 - 2024. All rights reserved.