Невозможно выполнить команды на Redis Server с RESP - PullRequest
0 голосов
/ 04 мая 2018

Я пытаюсь отправить команды из приложения .NET Console в экземпляр Redis через сокет. Я не понимаю, почему отправленные команды не применяются, так как байты были отправлены. Я пробовал и с протоколом RESP, и с обычная команда. Но никто не применяется к серверу:

 class Program
    {
        public static string command0 = "set a 200";
        public static string command1 = "*3\r\n$3\r\nset\r\n$1\r\na\r\n:200\r\n";

        static  void Main(string[] args)
        {
            Task.Run(async () =>
            {
                Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                IPEndPoint point = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 32772);
                await sock.ConnectAsync(point);
                await sock.SendDataAsync(command0);
                await sock.SendDataAsync(command1);
            }).Wait();
            Console.WriteLine("Hello World!");
            Console.ReadKey();
        }
    }

public static class SocketExtensions
    {
        public static  async Task  SendDataAsync(this Socket socket,string message)
        {
            byte[] bytes = Encoding.UTF8.GetBytes(message.ToCharArray());
            ArraySegment<byte> segment = new ArraySegment<byte>(bytes,0,bytes.Length);
            int rem = bytes.Length;
            while(rem>0)
            {
                int sent=await socket.SendAsync(bytes, SocketFlags.None);
                rem -= sent;
                segment.Slice(sent);
            }
        }
    }

Состояние сокета перед выполнением команды:

enter image description here

Может ли это быть из-за кодировки?

1 Ответ

0 голосов
/ 07 мая 2018

Проблема была в команде:

Для команды set a 200 я создавал запрос RESP:

*3\r\n$3\r\nset\r\n$1\r\na\r\n:200\r\n

Проблема заключалась в том, что я думал, что значение должно быть отправлено как целое число. Вместо этого я должен был написать это как массивную строку:

$3\r\n200\r\n

вместо

:200\r\n
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...