servicestack.redis 具有Redis发布和控制台应用程序的SignalR Core
我正在使用Asp.NETCore2.1和SignalrCore1.0.1 我创建了聊天应用程序,如下所述: 还将Signal配置为使用Redis
servicestack.redis 具有Redis发布和控制台应用程序的SignalR Core,
servicestack.redis,asp.net-core-signalr,
servicestack.redis,Asp.net Core Signalr,我正在使用Asp.NETCore2.1和SignalrCore1.0.1 我创建了聊天应用程序,如下所述: 还将Signal配置为使用Redis services.AddSignalR().AddRedis(Configuration["ConnectionStrings:Redis"]); 使用Redis cli monitor运行Redis server后,我可以看到以下命令: 1530086417.413730[0 127.0.0.1:57436]“订阅”SignalCore.Hubs
services.AddSignalR().AddRedis(Configuration["ConnectionStrings:Redis"]);
使用Redis cli monitor运行Redis server后,我可以看到以下命令:
1530086417.413730[0 127.0.0.1:57436]“订阅”SignalCore.Hubs.ChatHub:连接:VAIbFqtNyPVaod18jmm_Aw
1530086428.181854[0 127.0.0.1:57435]“发布”SignalCore.Hubs.ChatHub:all”“\x92\x90\x81\xa4json\xc4W{“类型\”:1,“目标\:“接收消息\”,“参数\:[{“用户\:”用户\“,\“消息\:”消息\“}]}\x1e”
在我想从另一个控制台应用程序推送消息之前,一切都正常。
在该应用程序中,我使用ServiceStack.Redis,代码如下:
var redisManager = new RedisManagerPool(configuration["ConnectionStrings:Redis"]);
using (var client = redisManager.GetClient())
{
client.PublishMessage("SignalRCore.Hubs.ChatHub:all", "{\"type\":1,\"target\":\"ReceiveMessage\",\"arguments\":[{\"user\":\"FromConsole\",\"message\":\"Message\"}]");
}
浏览器不会处理这些消息。我假设情况是用于信号机的附加信息:
“\x92\x90\x81\xa4json\xc4W{…}\x1e”
相关监控记录:
1530087843.512083[0 127.0.0.1:49480]“发布”SignalCore.Hubs.ChatHub:all“{\”type\”:1、\“target\”:\“ReceiveMessage\”、\“arguments\”:[{“user\”:“FromConsole\”、\“message\”:“message\”}]
有什么想法吗?我如何指定要发布的附加数据?
也许我应该使用更适合我的情况的东西,而不是ServiceStack.Redis使用Microsoft.AspNetCore.signal.Protocol;
using Microsoft.AspNetCore.SignalR.Protocol;
using Microsoft.AspNetCore.SignalR.Redis.Internal;
using StackExchange.Redis;
using System.Collections.Generic;
static void Main(string[] args)
{
using (var redis = ConnectionMultiplexer.Connect("127.0.0.1:6379"))
{
var sub = redis.GetSubscriber();
var protocol = new JsonHubProtocol();
var redisProtocol = new RedisProtocol(new List<JsonHubProtocol>() { protocol});
var bytes = redisProtocol.WriteInvocation("ReceiveMessage", new[] { "60344", "60344" });
sub.Publish("SignalRChat.Hubs.ChatHub:all", bytes);
}
}
使用Microsoft.AspNetCore.signal.Redis.Internal;
使用StackExchange.Redis;
使用System.Collections.Generic;
静态void Main(字符串[]参数)
{
使用(var redis=ConnectionMultiplexer.Connect(“127.0.0.1:6379”))
{
var sub=redis.GetSubscriber();
var protocol=新的JsonHubProtocol();
var redisProtocol=new redisProtocol(new List(){protocol});
var bytes=redisProtocol.WriteInvocation(“ReceiveMessage”,new[]{“60344”,“60344”});
sub.Publish(“signalchat.Hubs.ChatHub:all”,字节);
}
}
如何找到它
您还可以在Microsoft.AspNetCore.SignalR.Redis.Internal{Internal class RedisChannels中看到通道