首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在不同域上的两个SignalR集线器之间共享连接

在不同域上的两个SignalR集线器之间共享连接
EN

Stack Overflow用户
提问于 2019-01-09 23:24:52
回答 1查看 879关注 0票数 0

我现在有一个实时聊天网站,可以访问一个负责处理SignalR交互的子域:

代码语言:javascript
运行
复制
www.domain1.com > chat.domain1.com

我想介绍第二个重复的,基本上相同的网站,使用相同的结构:

代码语言:javascript
运行
复制
www.domain2.com > chat.domain2.com

两个站点都将使用相同的数据库,该数据库存储所有与SignalR相关的持久内容,如连接、聊天室、聊天消息等。

两个SignalR聊天子域是否有可能与连接到另一个子域的客户端通信?虽然共享数据库意味着持久资源是共享的,但我需要使其在chat.domain1.com上发布事件时,连接到chat.domain1.com和chat.domain2.com的客户端接收它们。

通过共享相同的域并使用CORS来处理跨域交互似乎是很常见的,如下所示:

代码语言:javascript
运行
复制
www.domain1.com  
                > chat.domain1.com
www.domain2.com

我不能这样做,因为SignalR聊天端点使用在主www域中设置的cookie进行身份验证。这些cookie不能跨域共享,即使可以,用户也必须能够同时登录到同台计算机上domain1.com和domain2.com上的不同帐户。

那么,有什么方法可以用于共享这两个集线器之间的连接呢?两个聊天子域都托管在同一台服务器上?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-10 02:45:21

通常,当您的应用程序在多个服务器之间扩展时,就会使用背板,但是在这种情况下,它似乎也能工作。我在后台使用了Server,但是也有一些包可以使用Redis和Azure服务总线。

首先安装用于Server的包:

代码语言:javascript
运行
复制
Install-Package Microsoft.AspNet.SignalR.SqlServer

然后配置背板:

代码语言:javascript
运行
复制
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使用Server来持久化它需要分发的任何消息。第一次启动时,它会在数据库中创建几个表,您可以这样做:

因为这两个应用程序共享相同的数据库,所以工作非常完美。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54119912

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档