【问题标题】:How to set connection id in SignalR client?如何在 SignalR 客户端中设置连接 ID?
【发布时间】:2019-10-21 22:18:04
【问题描述】:

我需要在 hubConnection.start() 之前设置连接 ID; 我看这里https://github.com/SignalR/SignalR/wiki/SignalR-JS-Client,我发现了什么: connection.id - 获取或设置当前连接的客户端 ID。 试过这个。不工作。这是客户端代码:

let hubUrl = 'http://localhost:5000/chat';
let hubConnection = new signalR.HubConnectionBuilder()
        .withUrl(hubUrl)
    .configureLogging(signalR.LogLevel.Information)
    .build();
hubConnection.id = "12345";
hubConnection.on("Send", function (data) {
    let elem = document.createElement("p");
    elem.appendChild(document.createTextNode(data));
    let firstElem = document.getElementById("chatroom").firstChild;
    document.getElementById("chatroom").insertBefore(elem, firstElem);

});

document.getElementById("sendBtn").addEventListener("click", function (e) {
    let message = document.getElementById("message").value;
    hubConnection.invoke("Send", message);
});

hubConnection.start();

hubConnection.id = "12345";这不会改变真实的连接 ID。 也许您知道如何编写客户端连接的其他方式?

【问题讨论】:

  • 为什么需要设置连接ID?为什么不能只使用系统分配的东西?
  • 我想在 identityFramework 中连接.id == ApplicationUser.Id
  • 你为什么要这样做?如果同一用户同时从多个选项卡/窗口/浏览器登录怎么办?维持这将是一场噩梦。相反,将连接与服务器端的特定用户相关联。
  • 如果同一个用户从多个标签/窗口/浏览器登录怎么办? id 到处都是一样的。它只是另一个价值而已.... oO
  • 连接 ID 应该是一个唯一值,用于单独标识单个连接。如果您开始有多个具有相同 ID 的连接,事情就会中断。您需要以不同的方式将连接与特定用户相关联。

标签: javascript asp.net-core signalr


【解决方案1】:

connectionId 根本无法手动创建或操作,它是在与服务器协商请求期间创建的。您可以阅读here,您可以实现自己的IConnectionIdFactory,但不建议这样做。您最多可以做的是获取 connectionId 并将其用于映射用户和组以及集线器内的其他逻辑。

【讨论】:

    猜你喜欢
    • 2014-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-05
    • 2012-04-05
    • 2012-04-22
    • 1970-01-01
    相关资源
    最近更新 更多