我有带SignalR Core 1.0.1的Asp.Net Core 2.1。
我创建了聊天应用程序,该应用程序在此处进行了描述: https://docs.microsoft.com/en-us/aspnet/core/tutorials/signalr?view=aspnetcore-2.1&tabs=visual-studio
还已将SignalR配置为使用Redis使用
services.AddSignalR().AddRedis(Configuration["ConnectionStrings:Redis"]);
使用redis-cli Monitor启动了Redis服务器,我可以看到以下命令:
1530086417.413730 [0 127.0.0.1:57436]“ SUBSCRIBE”“ SignalRCore.Hubs.ChatHub:connection:VAIbFqtNyPVaod18jmm_Aw”
1530086428.181854 [0 127.0.0.1:57435]“发布”“ SignalRCore.Hubs.ChatHub:all”“ \ x92 \ x90 \ x81 \ xa4json \ xc4W {\” type \“:1,\” target \“: \“ ReceiveMessage \”,\“ arguments \”:[{\“ user \”:\“ user \”,\“ message \”:\“ message \”}]} \\ 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\"}]");
}
消息未由浏览器处理。我认为情况就是在SignalR所用的以下附加信息中:
“ \ x92 \ x90 \ x81 \ xa4json \ xc4W {...} \ x1e”
相关监控记录:
1530087843.512083 [0 127.0.0.1:49480]“发布”“ SignalRCore.Hubs.ChatHub:all”“ {\” type \“:1,\” target \“:\” ReceiveMessage \“,\”参数\ “:[{\\ user \”:\“ FromConsole \”,\“消息\”:\“消息\”}]“
有什么主意我该如何指定要发布的其他数据? 也许我应该使用更适合我的情况的东西,而不是ServiceStack.Redis
答案 0 :(得分:0)
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);
}
}
如何找到它?
在信号源代码搜索“ .Publish”中,您可以找到https://github.com/aspnet/SignalR/blob/c852bdcc332ffb998ec6a5b226e35d5e74d24009/src/Microsoft.AspNetCore.SignalR.StackExchangeRedis/RedisHubLifetimeManager.cs
它使用RedisProtocol和messagepack来.WriteBytes。页眉页脚名称计数...