Redis отправляет объект с сообщением для использования при вызове метода - PullRequest
1 голос
/ 05 марта 2019

Здравствуйте, я получил redis в качестве объединительной панели для моего приложения SignalR, и я хочу, чтобы redis отправлял сообщение определенным группам независимо от того, на каком экземпляре SignalR они находятся. Я получил SignalR и заново настроил проблему, которую я сейчас получаю, это то, что я хочу отправить данные, которые имеют тип объекта, который будет использоваться методом SignalR, который отправляет их клиенту. Итак, сначала вот метод, который публикует

public async Task RedisBroadcast(string group, string message, object data)
    {
        var pub = Connection.GetSubscriber();
        Program.WriteConsole($"> Broadcasting to Group: {group} Message: {message}");
        await pub.PublishAsync(group, message);
    }

мне нужно, чтобы данные параметров были отправлены вместе с сообщением публикации, потому что позже в методе получатель получил сообщение, которое я хочу сделать что-то похожее на это

await sub.SubscribeAsync(group, (channel, message) =>
        {
            Program.WriteConsole("Got notification: " + (string)message);

            switch (message)
            {
                case "TopPlayers":
                    TopPlayersbroadcast(group, message, data);
                    break;
            }
        });

поэтому в зависимости от сообщения я вызываю разные методы, которые затем транслируют сообщение с данными всем подчиненным клиентам. Возможно ли это как-нибудь?

1 Ответ

1 голос
/ 05 марта 2019

Это возможно , но вам нужно закодировать эти данные внутри вашей полезной нагрузки , то есть внутри message, RedisValue, которые вы получаете в (channel, message) пара. Библиотека SE.Redis преднамеренно не получает мнения о том, как должны выглядеть полезные данные, поэтому она не предполагает, что вы хотите кодировать что-то подобное. Обратите внимание, что, поскольку это RedisValue, а не string, вы можете сделать больше нюансов, чем просто передать свой оригинальный string message.

Если бы это был я, я бы, вероятно, посмотрел на что-то вроде protobuf-net и наследование объектов в этом сценарии - поскольку a: он прекрасно работает с SE.Redis, поскольку SE.Redis поддерживает двоичные полезные нагрузки, а b: наследование позволяет вам представить данные довольно легко - предположительно встраивая message и data в то же фундаментальное сообщение, что и базовый тип, но для подобных схем существуют лоты различных макетов.

...