gpt4 book ai didi

redis - 使用 SignalR Redis 背板提高多个 Web 实例的横向扩展性能

转载 作者:可可西里 更新时间:2023-11-01 11:28:13 26 4
gpt4 key购买 nike

我在我们的应用程序中集成了 SignalR,它一直运行良好。几天前,由于某些要求,我们必须支持应用程序的横向扩展,因此我们选择了使用 Redis 的 SignalR 横向扩展。

但是,自集成以来,SignalR 本身已停止工作,我们得到的错误是:NO TRANSPORT could be initialized successfully。尝试为自动初始化指定不同的传输或根本不指定。

应用的方法:- 按照在线建议尝试使用不同版本的 SignalR - 没有帮助- 增加连接超时 - 没有帮助

需要一些帮助来解决这个问题。也欢迎就使用任何其他方法提出建议。

[Update1] 添加代码片段

public class Startup
{
public void Configuration(IAppBuilder app)
{
// Any connection or hub wire up and configuration should go here
GlobalHost.DependencyResolver.UseRedis("server", port, "password", "AppName");
app.MapSignalR();
}
}

有关更多引用,我点击了此链接:https://learn.microsoft.com/en-us/aspnet/signalr/overview/performance/scaleout-with-redis

[更新2]

public void Configuration(IAppBuilder app)
{
GlobalHost.Configuration.ConnectionTimeout = TimeSpan.FromSeconds(110);
GlobalHost.Configuration.DisconnectTimeout = TimeSpan.FromSeconds(30);
GlobalHost.Configuration.KeepAlive = TimeSpan.FromSeconds(10);
GlobalHost.Configuration.TransportConnectTimeout = TimeSpan.FromSeconds(45);

ConfigureAuth(app);
ConfigureSignalR(app);

// SignalR backplane code changes
string server = RoleEnvironment.IsAvailable ?
RoleEnvironment.GetConfigurationSettingValue(Constant.ConfigKeys.RedisCacheEndpoint) :
ConfigurationManager.AppSettings[Constant.ConfigKeys.RedisCacheEndpoint];
string port = RoleEnvironment.IsAvailable ?
RoleEnvironment.GetConfigurationSettingValue(Constant.ConfigKeys.RedisCachePort) :
ConfigurationManager.AppSettings[Constant.ConfigKeys.RedisCachePort];
string password = RoleEnvironment.IsAvailable ?
RoleEnvironment.GetConfigurationSettingValue(Constant.ConfigKeys.RedisCachePassword) :
ConfigurationManager.AppSettings[Constant.ConfigKeys.RedisCachePassword];

const string SIGNALR_REDIS_APPNAME = "Phoenix 2.0 Admin Tool";
string connectionString = server + ":" + Int32.Parse(port) + ";password=" + password + ",ssl=True,abortConnect=False";
RedisScaleoutConfiguration cfg = new RedisScaleoutConfiguration(connectionString, SIGNALR_REDIS_APPNAME);
GlobalHost.DependencyResolver.UseRedis(cfg);
app.MapSignalR();
}

最佳答案

我们有一个 Azure AppService,并且能够使用带有 Redis 背板的 SignalR。我确实观察到根据连接字符串内容,事情无法正常工作。我们使用了 GlobalHost.DependencyResolver.UseRedis API 的 RedisScaleoutConfiguration 重载,而不是使用您显示的重载。

这是基于我们工作的初创公司的代码块(更改值以保护弱势群体):

const string SIGNALR_REDIS_APPNAME = "OurAppName";
string connectionString = "thename.redis.cache.windows.net:6380;password=somelongsecret,ssl=True,abortConnect=False";
RedisScaleoutConfiguration cfg = new RedisScaleoutConfiguration(connectionString, SIGNALR_REDIS_APPNAME);
GlobalHost.DependencyResolver.UseRedis(cfg);

显然,您可以使用更多代码从 web.config 获取实际的连接字符串。我们在指定非默认数据库名称时也遇到了麻烦,因此在这里使用默认名称。

希望这对您有所帮助。

关于redis - 使用 SignalR Redis 背板提高多个 Web 实例的横向扩展性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43626249/

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