从 .net signalr 服务器发送 64 位整数不是问题。 然而在客户端,这会变得复杂,因为数字并不完全涵盖 64 位整数。 文档也没有提及任何内容。有人知道该怎么做吗?
我定义了一个自定义的 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)
})
})
}