gpt4 book ai didi

asp.net - 浏览不同页面时,在signalR中重用相同的连接

转载 作者:行者123 更新时间:2023-12-04 12:22:34 26 4
gpt4 key购买 nike

我有一个MVC项目,包含多个页面。

我有一个运行很长时间的过程,它会更新客户端的进度。但是,此更新仅发送给单个客户端,而不是广播给所有客户端。

Clients.Client(ConnectionId).sendMessage(msg);

在我的layout.cshtml中,这就是我连接到集线器的方式
    var serverHub = $.connection.notifier;
window.hubReady = $.connection.hub.start(function () { });

问题是,当我导航到另一个页面时,由于连接ID已更改,我不再收到来自signalr的消息。

我应该如何解决此问题,以便当客户端在页面之间导航时,我的信号中心仍可以向单个客户端发送消息。

最佳答案

您将要创建用户到连接ID的服务器映射。请参阅:SignalR 1.0 beta connection factory

您将希望让您的用户在发生OnDisconnected事件后仍然存在,并且当他们使用其他连接ID连接时,您可以继续将数据泵送到他们身上。

因此,思考过程可以如下:

  • 页面加载,SignalR连接实例化
  • 一旦完全启动连接,请调用=> TryCreateUser(返回用户,无论该用户是否存在或已创建)。
  • 长时间运行的进程启动
  • 客户端更改页面-> SignalR连接停止
  • 加载新页面,实例化新的SignalR连接
  • 一旦完全启动连接,请查看您是否具有cookie, session 或某种表示您的身份的数据=> TryCreateUser(userData)(返回您在最后一页上创建的用户)。
  • 数据继续抽取给用户。

  • 注意:如果您采用身份验证方法,则必须在开始连接之前进行身份验证,并且在SignalR连接的生存期内不能更改数据,只能在连接处于断开状态时创建/修改数据。

    关于asp.net - 浏览不同页面时,在signalR中重用相同的连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16077519/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com