servicestack.redis 具有Redis发布和控制台应用程序的SignalR Core,servicestack.redis,asp.net-core-signalr,servicestack.redis,Asp.net Core Signalr" /> servicestack.redis 具有Redis发布和控制台应用程序的SignalR Core,servicestack.redis,asp.net-core-signalr,servicestack.redis,Asp.net Core Signalr" />

servicestack.redis 具有Redis发布和控制台应用程序的SignalR Core

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

我正在使用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.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”,字节); } }
如何找到它

  • 在信号源代码搜索“.Publish”中,您可以找到

  • 它使用RedisProtocol和messagepack来.WriteBytes.header-footer名称计数


  • 您还可以在Microsoft.AspNetCore.SignalR.Redis.Internal{Internal class RedisChannels中看到通道