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



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

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

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

在我的布局。cshtml,这是我如何连接到集线器

    var serverHub = $.connection.notifier;
    window.hubReady = $.connection.hub.start(function () { });

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

我应该如何解决这个问题,这样我的信号中心仍然可以向单个客户端发送消息,而客户端从一个页面导航到另一个页面。

您将需要创建用户到连接id的服务器映射。参见:SignalR 1.0 beta连接工厂。

你会想让你的用户在OnDisconnected事件之后继续存在,当他们使用不同的连接Id连接时,你可以继续向他们发送数据。

所以思考过程可以如下:

  1. 页面加载,SignalR连接实例化
  2. 一旦连接完全启动调用=> TryCreateUser(返回一个用户,无论它是存在的还是创建的)。
  3. 长时间运行的进程启动
  4. 客户端更改页面-> SignalR连接停止
  5. 新的页面加载,新的SignalR连接实例化
  6. 一旦连接完全启动,看看你是否有一个cookie,会话,或一些类型的数据代表你是谁=> TryCreateUser(userData)(返回你在上一页创建的用户)。
  7. 数据继续向用户发送。

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

相关内容

  • 没有找到相关文章

最新更新