在不同域上的两个 SignalR Hub 之间共享连接
Sharing connections between two SignalR Hubs on different domains
我目前设置了一个实时聊天网站,该网站访问了一个负责处理 SignalR 交互的子域:
www.domain1.com > chat.domain1.com
我想介绍第二个,重复的,使用相同结构的基本相同的网站:
www.domain2.com > chat.domain2.com
两个站点将使用相同的数据库,该数据库存储所有持久的 SignalR 相关内容,如连接、聊天室、聊天消息等。
两个 SignalR 聊天子域是否可以与连接到另一个子域的客户端通信?虽然共享数据库意味着持久资源是共享的,但我需要这样做,以便当我在 chat.domain1.com 客户端上发布事件时连接到两个 chat.domain1.com 和 chat.domain2.com 接收它们。
似乎通常通过共享同一个域并使用 CORS 来处理跨域交互来处理此问题,如下所示:
www.domain1.com
> chat.domain1.com
www.domain2.com
我无法执行此操作,因为 SignalR 聊天端点使用主 www 域上设置的 cookie 进行身份验证。这些 cookie 不能跨域共享,即使可以,也要求用户能够在同一台计算机上同时登录 domain1.com 和 domain2.com 上的不同帐户。
那么,有什么方法可以用来共享这两个集线器之间的连接吗?两个聊天子域托管在同一台服务器上?
当您的应用程序跨多个服务器扩展时,通常会使用背板,但它似乎也适用于这种情况。我使用 SQL 服务器作为背板,但也有一些包可以让它与 Redis 和 Azure 服务总线一起工作。
首先为 SQL 服务器安装包:
Install-Package Microsoft.AspNet.SignalR.SqlServer
然后配置背板:
public class Startup
{
public void Configuration(IAppBuilder app)
{
// Any connection or hub wire up and configuration should go here
string sqlConnectionString = "Connecton string to your SQL DB";
GlobalHost.DependencyResolver.UseSqlServer(sqlConnectionString);
app.MapSignalR();
}
}
这允许 SignalR 使用 SQL 服务器来保存它需要分发的任何消息。第一次启动时,它会在数据库中创建一些表,你可以开始了:
因为两个应用程序共享同一个数据库,所以这非常有效。
我目前设置了一个实时聊天网站,该网站访问了一个负责处理 SignalR 交互的子域:
www.domain1.com > chat.domain1.com
我想介绍第二个,重复的,使用相同结构的基本相同的网站:
www.domain2.com > chat.domain2.com
两个站点将使用相同的数据库,该数据库存储所有持久的 SignalR 相关内容,如连接、聊天室、聊天消息等。
两个 SignalR 聊天子域是否可以与连接到另一个子域的客户端通信?虽然共享数据库意味着持久资源是共享的,但我需要这样做,以便当我在 chat.domain1.com 客户端上发布事件时连接到两个 chat.domain1.com 和 chat.domain2.com 接收它们。
似乎通常通过共享同一个域并使用 CORS 来处理跨域交互来处理此问题,如下所示:
www.domain1.com
> chat.domain1.com
www.domain2.com
我无法执行此操作,因为 SignalR 聊天端点使用主 www 域上设置的 cookie 进行身份验证。这些 cookie 不能跨域共享,即使可以,也要求用户能够在同一台计算机上同时登录 domain1.com 和 domain2.com 上的不同帐户。
那么,有什么方法可以用来共享这两个集线器之间的连接吗?两个聊天子域托管在同一台服务器上?
当您的应用程序跨多个服务器扩展时,通常会使用背板,但它似乎也适用于这种情况。我使用 SQL 服务器作为背板,但也有一些包可以让它与 Redis 和 Azure 服务总线一起工作。
首先为 SQL 服务器安装包:
Install-Package Microsoft.AspNet.SignalR.SqlServer
然后配置背板:
public class Startup
{
public void Configuration(IAppBuilder app)
{
// Any connection or hub wire up and configuration should go here
string sqlConnectionString = "Connecton string to your SQL DB";
GlobalHost.DependencyResolver.UseSqlServer(sqlConnectionString);
app.MapSignalR();
}
}
这允许 SignalR 使用 SQL 服务器来保存它需要分发的任何消息。第一次启动时,它会在数据库中创建一些表,你可以开始了:
因为两个应用程序共享同一个数据库,所以这非常有效。